【发布时间】:2011-07-05 06:15:58
【问题描述】:
我正在学习 Mockito。在开始使用模拟对象之前,我有一些单元测试更像是集成测试,所以我有一个带有 setUpBeforeClass() 的测试类,如下所示:
@BeforeClass
public static void setUpBeforeClass() throws Exception {
instance = new UserDataAccess();
instance.setDb(new MyDb());
}
现在与 mock Object 很相似,但设置稍微复杂一些:
@BeforeClass
public static void setupBeforeClass throws Exception {
instance = new UserDataAccess();
MyDb myDb = mock(MyDb.class);
when(...).thenReturn(...);
...
instance.setDb(myDb);
}
我还有一个测试套件,用于在运行测试之前以众所周知的状态加载数据库,这是通过套件调用的第一个测试类完成的。
我的想法是我不应该丢弃集成测试,所以我正在考虑将测试套件拆分为 UnitTestSuite 和 IntegrationTestSuite。事实上,模拟测试并没有测试所有内容,例如它们不测试查询是否正确。
另外,这两个套件之间的唯一区别是初始数据库重置和 setUpBeforeClass() 代码。仅仅为了改变一个方法而复制和改变所有的测试类是一种浪费。初始 DB 重置很容易跳过,我只是没有在单元测试套件中包含 db reset 测试类。
要拆分单元测试和集成测试,您有什么建议?扩展所有原始类以覆盖静态方法,然后在套件中包含正确的类?
或其他方法?你是怎么做的,或者你会怎么做?
【问题讨论】: