gpt4 book ai didi

java - 如何解决不必要的 stub 异常

转载 作者:IT老高 更新时间:2023-10-28 13:01:35 37 4
gpt4 key购买 nike

我的代码如下,

@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)

请帮我解决一下

最佳答案

首先你应该检查你的测试逻辑。通常有3种情况。首先,您在模拟错误的方法(您打错字或有人更改了测试代码,因此不再使用模拟的方法)。其次,在调用此方法之前您的测试失败了。第三,你的逻辑在代码中的某个地方出现了错误的 if/switch 分支,因此不会调用模拟方法。

如果这是第一种情况,您总是希望将模拟方法更改为代码中使用的方法。对于第二个和第三个,这取决于。如果它没有用,通常你应该删除这个模拟。但有时在参数化测试中存在某些情况,应该采取不同的路径或提前失败。然后您可以将此测试拆分为两个或多个单独的测试,但这并不总是很好看。可能带有 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 - 如何解决不必要的 stub 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42947613/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com