我的代码如下,
@RunWith(MockitoJUnitRunner.class)
public class MyClass {
private static final String code ="Test";
@Mock
private MyClassDAO dao;
@InjectMocks
private MyClassService Service = new MyClassServiceImpl();
@Test
public void testDoSearch() throws Exception {
final String METHOD_NAME = logger.getName().concat(".testDoSearchEcRcfInspections()");
CriteriaDTO dto = new CriteriaDTO();
dto.setCode(code);
inspectionService.searchEcRcfInspections(dto);
List<SearchCriteriaDTO> summaryList = new ArrayList<SearchCriteriaDTO>();
inspectionsSummaryList.add(dto);
when(dao.doSearch(dto)).thenReturn(inspectionsSummaryList);//got error in this line
verify(dao).doSearchInspections(dto);
}
}
我不例外
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected in test class: Test
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
1. -> at service.Test.testDoSearch(Test.java:72)
Please remove unnecessary stubbings or use 'silent' option. More info: javadoc for UnnecessaryStubbingException class.
at org.mockito.internal.exceptions.Reporter.formatUnncessaryStubbingException(Reporter.java:838)
at org.mockito.internal.junit.UnnecessaryStubbingsReporter.validateUnusedStubs(UnnecessaryStubbingsReporter.java:34)
at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:49)
at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:103)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
请帮助我如何解决
对我来说,@规则
和@Runwith(MockitoJUnitRunner.Silent.class)
建议都不起作用。这是一个遗留项目,我们在其中升级到mockito-core 2.23.0。
我们可以使用以下方法消除<code>不必要的StubbingException</code>:
Mockito.lenient().when(mockedService.getUserById(any())).thenReturn(new User());
而不是:
when(mockedService.getUserById(any())).thenReturn(new User());
不用说,您更应该查看测试代码,但我们首先需要编译代码并运行测试;)
将@RunWith(MockitoJUnitRunner.class)
替换为@RunWith(MockitoJUnitRunner.Silent.class)
。
首先,您应该检查测试逻辑。通常有3种情况。首先,您正在模拟错误的方法(您犯了拼写错误或有人更改了测试代码,以便不再使用模拟方法)。其次,在调用此方法之前,测试失败。第三,如果/switch分支在代码中的某个地方出错,因此不会调用模拟方法。
如果这是第一种情况,您总是希望将模拟方法更改为代码中使用的方法。第二个和第三个取决于。通常,如果这个mock没有用处,您应该删除它。但有时在参数化测试中会出现某些情况,这些情况应采用不同的路径或更早失败。然后,您可以将此测试分成两个或多个单独的测试,但这并不总是好看的。3个测试方法(可能有3个参数提供程序)可能会使您的测试看起来不可读。在这种情况下,对于JUnit 4,您可以使用以下选项来消除此异常:
@RunWith(MockitoJUnitRunner.Silent.class)
注释,或者如果您使用的是规则方法
@Rule
public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.LENIENT);
或者(同样的行为)
@Rule
public MockitoRule rule = MockitoJUnit.rule().silent();
对于JUnit 5测试,您可以使用mockito-junit-jupiter
包中提供的此注释来沉默此异常:
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class JUnit5MockitoTest {
}
如何使用实现以下功能? 这是完全不一样的,我实际上如何解决?
未处理 异常: java.io.FileNotFoundException 测试过文件存在,但放在Scanner里面报错。有佬能帮忙分析下吗
我正在开发一个Android应用程序,使用ExoPlayer用于视频播放,Glide用于图像显示,以及用于文件下载的下载库,并且它们都具有与HttpURLConnection相关的NullPointerExctive,我确信使用的链接是可用的。 神奇的是,我只是按照这些库的官方留档中描述的方法正常加载数据,这种错误时有发生,三个库可能不会同时抛出NullPointerExctive,我甚至不知道如
我正在尝试将50000条记录插入到一个五节点的卡桑德拉集群中。我正在使用执行异步以提高性能(减少应用程序端的插入时间)。我尝试了具有多个批处理大小的批处理语句,但每次我都遇到以下异常。 我插入了数据,即10000,20000到40000条记录,没有任何问题。以下是我编写的java代码。 其中ps是准备好的语句,batches是批数,batchSize是批中的记录数。 我无法理解这个问题的根本原因。