繁体   English   中英

测试使用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();
}

这样的测试有用吗? 这些方法需要进行测试,如何进行测试?

我认为,您一般不应该尝试100%的测试覆盖率。 高测试覆盖率是好的,完美覆盖率是没有用的,会浪费您的时间。 任何仅设置,获取工作或将工作委托给另一种方法的方法都不应进行测试,因为这将花费您很多钱,甚至在重构时会花费更多。 最后,它不会为使用您的API的任何人增加更多的反回归值或任何帮助。

首选具有真实智能,风险或敏感性的测试方法。 您提交的案例比您自己的代码更能测试Mockito。 这将花费构建时间,并且不会对您有所帮助。

就我个人而言,我根本不认为verify()有用,因为它直接测试实现而不是方法的结果。 当您更改实现而结果仍然正确时,这将给您带来错误的失败。

至于这是否有用:没有逻辑可以测试,所以没有,它不是特别有用。

根据我在其他答案中留下的评论

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相比,如果start设法在不调用setter或getter的情况下达到此状态,则它也可以变为true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM