你如何提供深度模拟对象?

tre*_*rog 4 java junit mocking

我不认为我也应该理解测试.我已经写了很多测试并得到了不错的报道,但我不禁觉得它不直观.

让我解释一下:如果我有一个类,我正在测试一个方法,它需要传递一个具有各种状态的某种大对象.这个对象反过来包含我不知道的其他对象及其状态,如何为此方法创建模拟或存根对象,并为其提供可以使用的数据.看来我必须用各种内部子对象信息创建一个大对象来练习我的方法.我很困惑!

Rya*_*art 6

这里的其他答案指向你嘲笑框架,如果你还没有使用它,你一定要看看(使用Mockito!).但是,这几乎可以肯定是您测试的一个例子,告诉您您遇到了设计问题.如果你发现自己必须提供各种不相关的信息和模拟对象只是为了通过测试,那么你就是

  1. 试图一次测试太多件,
  2. 编写一个很难阅读和理解的测试,因为由于信噪比低,无法确定测试应该关注什么,和/或
  3. 写一个极其脆弱的测试,可以打破最轻微,无关的变化,带来高昂的维护成本和"只是让测试通过"的心态,而不关心测试应该测试什么.

这些都是不是为可测试性而设计的系统的所有症状,这几乎普遍等同于不是为了可读性而设计的系统,这意味着它设计得不好.

如果您关心测试,请接受测试优先思考和TDD.我强烈推荐几本关于这个主题的书:"xUnit Test Patterns",我已阅读和评论过,以及"面向对象的软件,以测试为导向",我几乎已经读完了.