Skip to content

Instantly share code, notes, and snippets.

@judoole
Created October 7, 2011 13:24
Show Gist options
  • Save judoole/1270262 to your computer and use it in GitHub Desktop.
Save judoole/1270262 to your computer and use it in GitHub Desktop.
GroovyBDDJUnitShit
@Test
public void skal_hente_alle_tenant_profiler() {
Gitt.at_tenant_profile_eksisterer(new TenantProfile(1, "Single"))
Gitt.at_tenant_profile_eksisterer([id:2, description:"Dubletter"])
Gitt.at_tenant_profile_eksisterer(new TenantProfile(id:3, description:"Tribletter"))
Naar.jeg_henter_informasjon_om_soknadslista()
Saa.skal_antallet_tenant_profiler_vaere(3)
}
@Autowired
private GodAndOdinStep Gitt;
@Autowired
private GodAndOdinStep Naar;
@Autowired
private GodAndOdinStep Saa;
@oc
Copy link

oc commented Oct 7, 2011

Hvordan er det mer lesbart enn:

Gitt Jeg har tenant profiler:
  | id | description |
  | 1  | Single      |
  | 2  | Dubletter  |
  | 3  | Tribletter |
Når  Jeg henter søknadsinformasjon
  skal antallet tenant profiler være 3

Eller implementasjonen for en utvikler:

@RunWith(Cucumber.class)
@Feature(value = "tenants.feature")
public class TenantsFeature() {

final TenantApplication sut = new TenantApplication();
final TenantApplicationTestDriver driver = new TenantApplicationTestDriver(sut);

TenantProfiles tenantProfiles;

@Gitt("Jeg har tenant profiler:")
public void jeg_har_tenant_profil(List<TenantProfile> profile) {
  driver.saveAllTenantProfiles(profile)
}

@Når("Jeg henter søknadsinformasjon")
public void jeg_henter_søknadsinformasjon() {
  tenantProfiles = sut.listAllApplications()
}

@("skal antallet tenant profiler være \\n+")
public void skal_antallet_tenant_profiler_vaere(int expected) {
  assertThat(tenantProfiles.size(), equalTo(expected))
}

}

@judoole
Copy link
Author

judoole commented Oct 7, 2011

Lesbarhet: Gherkin > GroovyBDD

GroovyBDD #win:

@Test
public void skal_kunne_hente_tenant_profiler()
      Gitt.at_...
                 |_tenant_profile_eksisterer(Object profil)
                 |_kunden_eksisterer(Object kunde)
                 |_.....
}

Codecompletion! Yuppie!

Cucumber-jvm #loose

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-core</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

Sagt bittelitt på en annen måte; mens jeg venter på 1.0.0 så lager jeg steps som lett kan gjenbrukes i cucumber-jvm.

Groovy-step:

@Repository
class TenantProfileStep {
    @Transactional
    public at_tenant_profile_eksisterer(Object profil) {
        TenantProfile t = profil as TenantProfile;
        simpleJdbcTemplate.update("Insert into TENANT_PROFILES (ID,DESCRIPTION) values (?,?)", t.id, t.description);
    }

    @Autowired
    private SimpleJdbcTemplate simpleJdbcTemplate;
}

Jeg tror disse stepsa skal kunne lett omformes til cucumber-jvm-steps når den dagen kommer. I hopes.

@follesoe
Copy link

Minner om en hjelpeklasse jeg bruker en gang i blant (BDD støtte på 7 kodelinjer).

public abstract class BDD<T> where T : BDD<T>
{
    protected T Given { get { return (T)this; } }
    protected T When { get { return (T)this; } }
    protected T Then { get { return (T)this; } }
    protected T And { get { return (T)this; } }    
}

Og her en annen variant:

[TestFixture]
public abstract class SpecFor<T>
{
    protected T Subject;

    [SetUp]
    public void Setup()
    {
        Subject = Given();    
        When();
    }

    protected abstract T Given();
    protected abstract void When();
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment