0

我正在 Spring Application 中测试 DAO。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/applicationContext.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class CommentDAOImplTest { @Autowired //testing mehods here}

测试运行良好。我能够添加评论,并且我还设置了 defaultRollback 属性。因此,添加的评论将被自动删除。快乐!..现在问题出在 mcomment 的序列号上。我可以以任何方式回滚序列号吗?任何建议。我不想弄乱序列号。业务需要显示评论 ID。(我仍然不知道为什么)。

我知道内存数据库是一个选项....但我猜 defaultRollback 的目的是消除内存数据库测试和模拟。(只是我的观点。)

4

2 回答 2

1

创建一个测试数据库,在开始测试之前擦除它。

不要在生产数据库中运行测试(可能会不小心将测试数据插入生产)并且永远不要将生产复制到测试数据库中(这将强烈表明您不知道您正在测试什么并且测试充其量是事后的想法) .

于 2013-10-17T15:52:14.990 回答
0

如果您正在使用 HSQL DB,则没有解决方案,但您可以在每个方法@DirtiesContext之前使用 spring 的注释。@Test例如:

@Test
@DirtiesContext
public final void foo() {
    //Get the first sequence value = 0
    //Next value = 1
}

@Test
@DirtiesContext
public final void foo2() {
    //Gets 0, not 2
    //Next value = 1
}

@DirtiesContext。如果测试修改了上下文,则使用此注解——例如,通过修改单例 bean 的状态、修改嵌入式数据库的状态等。请求相同上下文的后续测试将提供一个新上下文。

基本上你在每个方法之前初始化一个新的 spring 上下文,但至少你可以测试你的序列或任何你想要测试的东西。

于 2017-06-30T14:19:53.487 回答