测试用 Mockito 重复代码
Tests repeats the code with Mockito
我的测试只是重复代码。对于方法
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();
}
这样的测试有用吗?这样的方法需要测试,如何测试?
我个人认为 verify()
根本没有用,因为它直接测试实现而不是您方法的结果。当您在结果仍然正确的情况下更改实现时,这会给您错误的失败。
至于这个有没有用:没有逻辑可以测试所以没有,不是特别好用。
在我看来,一般情况下您不应该尝试拥有 100% 的测试覆盖率。拥有高测试覆盖率是好的,拥有完美的覆盖率是无用的,而且会浪费你的时间。任何只是设置、获取或将工作委托给另一个方法的方法都不应该被测试,因为它会让你编写成本很高,重构时甚至会花费更多。最后,它不会增加更多的反回归价值,也不会为任何使用您的 API.
的人提供任何帮助
更喜欢真实智能的测试方法,有风险或敏感。您提交的案例比您自己的代码测试更多的 Mockito。这将花费构建时间并且对您没有帮助。
根据我在其他回答中留下的评论
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));
}
没什么不同,但与 verify 相比它也可以为真,如果 start 设法在不调用 setter 或 getter 的情况下达到此状态。
我的测试只是重复代码。对于方法
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();
}
这样的测试有用吗?这样的方法需要测试,如何测试?
我个人认为 verify()
根本没有用,因为它直接测试实现而不是您方法的结果。当您在结果仍然正确的情况下更改实现时,这会给您错误的失败。
至于这个有没有用:没有逻辑可以测试所以没有,不是特别好用。
在我看来,一般情况下您不应该尝试拥有 100% 的测试覆盖率。拥有高测试覆盖率是好的,拥有完美的覆盖率是无用的,而且会浪费你的时间。任何只是设置、获取或将工作委托给另一个方法的方法都不应该被测试,因为它会让你编写成本很高,重构时甚至会花费更多。最后,它不会增加更多的反回归价值,也不会为任何使用您的 API.
的人提供任何帮助更喜欢真实智能的测试方法,有风险或敏感。您提交的案例比您自己的代码测试更多的 Mockito。这将花费构建时间并且对您没有帮助。
根据我在其他回答中留下的评论
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));
}
没什么不同,但与 verify 相比它也可以为真,如果 start 设法在不调用 setter 或 getter 的情况下达到此状态。