Oscar, The generic Spec Transformer looks interesting. I couldn't quite figure out how it would be used. Maybe you could give an example test case?
What I've got working right now can drive tests like the following: Scenario: A new topping is added Given these toppings exist: | topping name | price | | Pepperoni | 1.00 | | Extra Cheese | 1.25 | When new toppings are created: | topping name | price | | Pineapple | 0.50 | Then these toppings will remain: | topping name | price | | Pepperoni | 1.00 | | Extra Cheese | 1.25 | | Pineapple | 0.50 | The cool part is that "topping" and "toppings" are parameterized, as well as the field names, so I can use any domain entity without having to change the glue. It will work with any number of rows or field names. I suspect this is similar to what you are working on. Of course this only tests the most basic of features, but I suspect it wouldn't be too hard to extend this to meet work with many different kinds of entity tests. My glue code looks like this: @Given("^these ([\\w ]+) exist:$") public void initializeEntities(@NotNull String niceServiceName, @NotNull List<Map<String, String>> entitiesToAdd) throws Throwable { if (entitiesToAdd.size() > 0) { final Class<? extends DataEntityService> serviceClass = dataEntityUtil.getDataEntityServiceClass(niceServiceName); final DataEntityService service = service(serviceClass); service.clear(); createEntities(niceServiceName, entitiesToAdd); } } @When("^new ([\\w ]+) are created:$") public void createEntities(@NotNull String niceServiceName, @NotNull List<Map<String, String>> entitiesToAdd) throws Throwable { final Class<? extends DataEntityService> serviceClass = dataEntityUtil.getDataEntityServiceClass(niceServiceName); final DataEntityService service = service(serviceClass); for (Map<String, String> entityMap : entitiesToAdd) { final DataEntity entity = dataEntityUtil.convertToEntity(service, entityMap); service.makePersistent(entity); } } @Then("^these ([\\w ]+) will remain:$") public void assertEntitiesExist(@NotNull String niceServiceName, @NotNull List<Map<String, String>> entitiesWillExist) throws Throwable { final Class<? extends DataEntityService> serviceClass = dataEntityUtil.getDataEntityServiceClass(niceServiceName); final DataEntityService service = service(serviceClass); for (Map<String, String> entityMap : entitiesWillExist) { Assert.assertTrue("Entity doesn't exist", dataEntityUtil.entityExists(service, entityMap)); } } I am still quite new to ISIS and Cucumber, so any advice on how this can be improved is more than welcome. -- Jeremy On Sep 12, 2013, at 11:23 AM, GESCONSULTOR - Óscar Bou wrote: Same happened to a mate upgrading to the latest snapshot. A default value as suggested by Jeremy would be ok. Jeremy, did you see the mail at [1] ? It's intent was to solve your idea of a "generic" Spec Transformer for Isis entities. There I copied the code of a generic class. I'm testing an improved version and plan to commit it next week (in fact, 1 abstract class with 2 specializations; one allowing null entities, and one throwing an exception if the referenced object is not found - as normally is a "transcription" problem). If you want to previously access it, don't hesitate to ask and I can attach current version to a JIRA ticket. HTH, Oscar [1] http://markmail.org/search/isis-users+list:org.apache.incubator.isis-users#query:isis-users%20list%3Aorg.apache.incubator.isis-users%20from%3A%22GESCONSULTOR%20-%20%C3%93scar%20Bou%22+page:9+mid:tibcgc45fii566w3+state:results