java – 如何改进我的junit测试

对我的junit测试看起来像一个漫长的故事:

>我创建4个用户
>我删除1个用户
>我尝试使用已删除用户登录,并确保它失败
>我用剩下的3个用户登录,验证我可以登录
>我将消息从一个用户发送到另一个用户,并确认它显示在发件人的发件人和收件人的收件箱中.
>我删除消息
> …
> …

优点:
测试是非常有效的(非常好的检测错误),并且非常稳定,因为他们只使用API​​,如果我重构代码,那么测试也被重构.因为我不使用“肮脏的技巧”,例如在给定的状态下保存和重新加载数据库,所以我的测试忽略了模式更改和实现更改.

缺点:
测试变得难以维护,任何测试变化都会影响其他测试.测试运行8-9分钟,这对于持续集成是非常好的,但对开发人员来说有点令人沮丧.测试不能孤立运行,您可以做的最好的就是在您感兴趣的测试中停止运行,但您绝对必须运行所有以前的测试.

你如何改进我的测试?

解决方法

单元测试应该理想地是独立的,并且能够以任何顺序运行.所以,我建议你:

分解你的测试是独立的
考虑使用内存数据库作为测试的后端
考虑在最后回滚的事务中包装每个测试或套件
>单位测试来查看时间的流逝,并集中精力

如果创建几个用户并发送几个消息需要8分钟,性能问题可能不在测试中,而可能是系统本身的性能问题的症状 – 只有您的Profiler可以肯定地知道!

[请注意:我不认为这些测试是“集成测试”,尽管我可能在少数;我认为这些类型的测试是功能的单元测试,一个TDD]

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...