我在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测试和模拟。 (只是我的意见。)
答案 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的状态,修改嵌入式数据库的状态等。请求相同上下文的后续测试将提供新的上下文。
基本上你是在每个方法之前初始化一个新的弹簧上下文,但至少你可以测试你的序列或你想要测试的任何东西。