1 回答
TA贡献2021条经验 获得超8个赞
它总是一个妥协。
但这种折衷是双向的:如果你对所有东西都使用工厂,那么是的,你将能够模拟出几乎所有东西,并且你不会在测试方法中有任何单一的“新”,但是,你的测试将看起来像一长串模拟,并且很难阅读/理解/维护测试及其 IMO 测试的强制性要求。
还有一点需要考虑,黑盒测试比白盒测试要好得多。在您的情况下,您不返回JSONArray users
,只需将其创建为内部变量即可进行内部计算。
现在,理想情况下,测试应该检查给定输入参数列表,该方法是否返回预期值,仅此而已,测试不应该摆弄诸如“如果我想让它通过,我必须在这里创建内部值”之类的问题以这种特殊的方式,然后创造另一个类似的价值”。这一切都使得测试不明确且非常脆弱。
所以这里有一些“经验法则”:
总是喜欢黑盒测试。不要检查方法内部做了什么,最好在编写测试时甚至不要查看被测类的实现。
始终尝试编写在给定参数集的情况下实际返回某些内容的方法 这将使测试更易于阅读和理解
仅模拟/存根交互 - 该类需要的真正依赖项。通常这些并不多,而且它们出现在非常具体的点上。不要模拟内部变量的创建、就地完成的静态计算的结果或返回值。
例子:
// mocking example:
class SomeService {
private SomeDAO dao; // this is a real dependency, mock it in test
}
// don't mock
Math.max(a,b)
// don't mock
LocalDateTime.of(...)
// don't mock
public int f() {
...
List<Integer> internalVariable = new ArrayList<>(..)
}
添加回答
举报