Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试使用Mockito重复代码_Java_Unit Testing_Junit_Mocking_Mockito - Fatal编程技术网

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进行测试,因为你只会重复你想测试的代码。我同意你的观点。“测试方法契约,而不是它的实现”。