Java 测试使用Mockito重复代码
我的测试只是重复代码。方法Java 测试使用Mockito重复代码,java,unit-testing,junit,mocking,mockito,Java,Unit Testing,Junit,Mocking,Mockito,我的测试只是重复代码。方法 public void start(上下文){ setA(CONST_A); 背景。环境影响评估(CONST_B); ... } 我使用Mockito编写了测试 @测试 public void testStart()引发异常{ Context mockContext=mock(Context.class); action.start(mockContext); 验证(mockAction).setA(Action.CONST__A); 验证(模拟动作).setB(动
public void start(上下文){
setA(CONST_A);
背景。环境影响评估(CONST_B);
...
}
我使用Mockito编写了测试
@测试
public void testStart()引发异常{
Context mockContext=mock(Context.class);
action.start(mockContext);
验证(mockAction).setA(Action.CONST__A);
验证(模拟动作).setB(动作常数B);
...
}
还是为了
公共无效法案(){
state.act();
}
试验
@测试
public void testAct()引发异常{
State mockState=mock(State.class);
setState(mockState);
context.act();
验证(mockState.act();
}
这些测试有用吗?这些方法需要测试和如何测试它们? < P>个人,我不认为<代码> VIEFIFY()/CUT>完全有用,因为它直接测试实现而不是方法的结果。当您在结果仍然正确的情况下更改实现时,这将导致错误的失败
<>这是否有用:没有逻辑来测试“否”,它不是特别有用。 < P>个人,我不认为<代码> VIEFIFY()/CUT>完全有用,因为它直接测试实现而不是方法的结果。当您在结果仍然正确的情况下更改实现时,这将导致错误的失败
至于这是否有用:没有测试的逻辑,所以不,它不是特别有用。在我看来,一般来说,您不应该尝试100%的测试覆盖率。有一个高的测试覆盖率是好的,有一个完美的覆盖率是无用的,浪费你的时间。任何只设置、获取或将工作委托给另一个方法的方法都不应该被测试,因为它将花费您大量的编写成本,重构时甚至更高。最后,它不会为任何使用API的人增加更多的反回归值或任何帮助
喜欢有真实智慧、有风险或敏感的测试方法。您提交的案例比您自己的代码更容易测试。这需要构建时间,对您没有帮助。在我看来,您一般不应该尝试100%的测试覆盖率。有一个高的测试覆盖率是好的,有一个完美的覆盖率是无用的,浪费你的时间。任何只设置、获取或将工作委托给另一个方法的方法都不应该被测试,因为它将花费您大量的编写成本,重构时甚至更高。最后,它不会为任何使用API的人增加更多的反回归值或任何帮助
喜欢有真实智慧、有风险或敏感的测试方法。您提交的案例比您自己的代码更容易测试。这需要构建时间,对您没有帮助。根据我在其他答案中留下的评论
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的情况下达到这种状态,那么verify也可以成为true。根据我在其他答案中留下的评论
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没有太大区别,但与verify相比,如果start能够在不调用setter或getter的情况下达到此状态,它也可以成为true。根据Bob Martin的说法,模仿行为(即使用verify)是脆弱的。最好是基于数据进行测试。根据Bob Martin的说法,模仿行为(即验证)是脆弱的。最好是基于数据进行测试。如果在一个团队中工作,严格的100%覆盖率可以避免一个成员错过测试,因为他判断测试方法是原始的。但是我同意(你和多尼)不应该用verify进行测试,因为你只会重复你想测试的代码。我同意你的观点。“测试方法契约,而不是它的实现”。如果在一个团队中工作,严格的100%覆盖率可以避免一个成员错过一个测试,因为他判断测试的方法是原始的。但是我同意(你和多尼)不应该用verify进行测试,因为你只会重复你想测试的代码。我同意你的观点。“测试方法契约,而不是它的实现”。