I am using DbUnit together with Unitils, which works great most of the time.
Today I found a strange problem.
Situation is:
- I use Hibernate, and have id with “increment” generator:
<id name="Id"> <generator class="increment"/> </id>
- I prepare test dataset, where maximal id is 5.
- I use clean-insert loading strategy.
- I have two test methods
test1andtest2, each adding one row in this table. - After
test1method newly added row has id=6. - After
test2method newly created row has id=7.
This is all OK and I get why this is like that. It is a problem from maintenance perspective though. If I ever add third test method between the two, method test2 will suddenly fail even though nothing changed, just because row will get different id.
Is there anyway I can force DbUnit or Hibernate to calculate next id value before each test method?
First thing, you should provide the complete dataset, yes with
idas well. If not, don’t test or base your test uponids. Why not test? because its already well tested and reliable thing. Always remember never test third party libraries, most of them already well tested. But it seems quite impossible to not depending uponids. I agree, you should write some mock class to tackle this issue for you, or may be you can provide some setter method to overwrite the value generated by your own.Second option is always start your test case with empty table. You can write a fixture to clean the table for you, before every test case.