DbUnit: problem with increment id generation
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
test1
andtest2
, each adding one row in this table. - After
test1
method newly added row has id=6. - After
test2
method newly created row has id=7.
This is all OK and I get why this is like that. I开发者_开发问答t 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 id
as well. If not, don't test or base your test upon ids
. 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 upon id
s. 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.
The solution is not to rely on generated ids:
- they are outside the control of your test.
- if you make them controlled by the test, you are no longer testing the class-under-test
精彩评论