我的测试只是重复代码。方法
public void start(Context context) {
context.setA(CONST_A);
context.setB(CONST_B);
...
}
我使用Mockito编写测试
@Test
public void testStart() throws Exception {
Context mockContext = mock(Context.class);
action.start(mockContext);
verify(mockAction).setA(Action.CONST_A);
verify(mockAction).setB(Action.CONST_B);
...
}
或
public void act() {
state.act();
}
测试
@Test
public void testAct() throws Exception {
State mockState = mock(State.class);
context.setState(mockState);
context.act();
verify(mockState).act();
}
此类测试有用吗?需要测试这些方法以及如何测试它们吗?
答案 0 :(得分:2)
在我看来,你不应该试图获得100%的测试覆盖率。拥有高测试覆盖率是好的,拥有完美的覆盖范围是没用的,浪费你的时间。任何只设置,获取或委托工作到另一个方法的方法都不应该被测试,因为它会花费你很多的时间来编写,甚至更多的重构。最后,它不会为使用您API的任何人添加更多的反回归值或任何帮助。
首选具有真实智能,风险或敏感的测试方法。您提交的案例比您自己的代码测试更多Mockito。这将花费构建时间,对您没有帮助。
答案 1 :(得分:1)
就个人而言,我并不认为verify()
有用,因为它直接测试实现而不是方法的结果。当结果仍然正确时更改实现时,这将导致错误的失败。
至于这是否有用:没有逻辑可以测试,所以没有,它不是特别有用。
答案 2 :(得分:1)
根据我在其他答案中留下的评论
public void start(Context context) {
context.setA(CONST_A);
context.setB(CONST_B);
...
}
不应该使用Mockito进行测试,而不是
@Test
public void testStart() throws Exception {
Context context = new Context();
action.start(context);
assertThat(context.getA(), equalTo(Action.CONST_A));
assertThat(context.getB(), equalTo(Action.CONST_B));
}
它没有太大的不同,但与验证相比它也可以实现,如果start设法达到这种状态而不调用setter或getter。