I guess it depends on the situation. API-based is easier to comprehend and manage on the lower end (small/narrow data sets), while CSV scales much better to long/wide datasets. I often generate the later with real SQL against a real DB, then edit in LibreOffice/Excel, then save as a CSV in the project.
Andrus > On May 3, 2018, at 3:35 PM, Ken Anderson <k...@anderhome.com> wrote: > > Which do you late less? :) > >> On May 3, 2018, at 8:32 AM, Andrus Adamchik <and...@objectstyle.org> wrote: >> >> Hi Mike, >> >>> Is derby entirely in memory or does it have a filesystem footprint? >> >> It does. >> >>> I've found that maintaining tests using standalone data files is far more >>> difficult than using helper classes to create default data sets. >> >> Bootique tools support both types of datasets: file- and API-based, e.g. >> [1]. And fwiw I personally hate both of them :) >> >> Andrus >> >> [1] >> https://github.com/bootique/bootique-jdbc/blob/master/bootique-jdbc-test/src/main/java/io/bootique/jdbc/test/Table.java >> >> >>> On May 3, 2018, at 3:26 PM, Mike Kienenberger <mkien...@gmail.com> wrote: >>> >>> As a general observation after using dbunit for 13 years, I've found >>> that maintaining tests using standalone data files is far more >>> difficult than using helper classes to create default data sets. I >>> ended up with far too many data sets, and things were even worse if I >>> needed a test with many instances of the same entity or tests with >>> entities in complicated relationships. >>> >>> Trying to update the data sets every time the schema changed was >>> difficult and time consuming. That was with >>> named-key-value-property xml databases. I would expect csv to be even >>> more difficult. >>> >>> Switching to programically generated data has made life far easier for >>> me. Schema changes only have to be made one place. I can create >>> convenience methods that allow me to only specify the fields of >>> interest rather than every field, as well as create common complex >>> data relationships with a single call. On more recent projects, I >>> now generate the default "populate every field" methods for individual >>> entities. That breaks my convenience methods when the schema changes >>> and forces me to fix the data generation immediately while it's still >>> obvious what column has been added or removed. It's been a >>> life-saver in this project where there are 6 other developers also >>> modifying the schema in unexpected ways. >>> >>> Andrus, >>> >>> Is derby entirely in memory or does it have a filesystem footprint? I >>> remember trying to use it back when I was first looking for in-memory >>> databases, but something prevented me. It was probably 13 or more >>> years ago, so it's very likely that whatever was wrong is no longer an >>> issues. >>> >>> >>> >>> >>> On Thu, May 3, 2018 at 3:19 AM, Andrus Adamchik <and...@objectstyle.org> >>> wrote: >>>> I use Derby. From my experience it is the most "serious" choice out of all >>>> in-memory Java databases. HSQL/H2 left a bad aftertaste from the days when >>>> we used it for the Modeler preferences. Though this may not be relevant in >>>> the context of unit tests. >>>> >>>> Beyond that, I use bootique-jdbc-test / bootique-cayenne-test to manage DB >>>> lifecycle, datasets and assertions. There may be a lot of overlap with >>>> DBUnit, but if you are on Bootique, it integrates very nicely with the >>>> existing app configs, Cayenne models, etc. It supports loading data from >>>> CSVs, comparing DB state with CSV, referencing tables by mapped Cayenne >>>> classes, etc. There not much documentation as of yet, but here is a small >>>> random example: >>>> >>>> @ClassRule >>>> public static BQTestFactory TEST_FACTORY = new BQTestFactory(); >>>> private static CayenneTestDataManager DATA_MANAGER; >>>> >>>> @BeforeClass >>>> public static void beforeClass() { >>>> BQRuntime app = TEST_FACTORY >>>> .app("-s", "-c", "classpath:config.yml") >>>> .autoLoadModules() >>>> .createRuntime(); >>>> >>>> app.run(); >>>> >>>> DATA_MANAGER = CayenneTestDataManager.builder(app) >>>> .doNotDeleteData() >>>> .entitiesAndDependencies(E1.class, E2.class, E3.class) >>>> .build(); >>>> >>>> >>>> DATA_MANAGER.getTable(E1.class).csvDataSet().load("classpath:e1.csv").persist(); >>>> } >>>> >>>> @Test >>>> public void testXyz() { >>>> // send some requests; check the data in DB... >>>> >>>> Table e1 = DATA_MANAGER.getTable(E1.class); >>>> e1.matcher().assertMatches(4); >>>> } >>>> >>>> Andrus >>>> >>>>> On May 2, 2018, at 10:59 PM, Ken Anderson <ken.ander...@amphorainc.com> >>>>> wrote: >>>>> >>>>> All, >>>>> >>>>> We’re thinking about setting up an in-memory database in place of SQL >>>>> Server for doing unit tests. Does anyone have any experience doing this >>>>> with Cayenne? Any recommendations or warnings? >>>>> >>>>> Thanks, >>>>> Ken >>>> >> >