用JUnit(Hibernating,Spring MVC)测试Spring应用程序的序列号

时间:2013-10-17 15:46:42

标签: hibernate spring-mvc junit4

我在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的序列号。我可以以任何方式回滚序号吗?对此有任何建议。我不想弄乱sequrnce号码。业务需要显示评论ID。 (我还是不知道为什么)。

我知道在内存中db是一个选项....但我猜测defaultRollback的目的是消除内存中的db测试和模拟。 (只是我的意见。)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

@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的状态,修改嵌入式数据库的状态等。请求相同上下文的后续测试将提供新的上下文。

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