【问题标题】:How to group mockito TestCase如何对模拟测试用例进行分组
【发布时间】:2019-10-15 00:45:21
【问题描述】:

我有一些 Mockito 的测试课程。我尝试通过 TestSuite 聚合它们,但它有错误。

第一个测试用例:

@RunWith(MockitoJUnitRunner.class)
public class GetLastLoginTimeTest {

    @Test
    public void happyScenario_OK() throws Exception{
        ....
    }
    ....
}

第二个测试用例:

@RunWith(MockitoJUnitRunner.class)
public class FetchUserLoginHistoryTest {

    @Test
    public void happyScenario_OK() throws Exception{
        ....
    }
    ....
}

套件测试类:

@RunWith(MockitoJUnitRunner.class)
@SuiteClasses({GetLastLoginTimeTest.class , FetchUserLoginHistoryTest.class})
public class LoginHistoryBLTestSuite {

错误:

org.mockito.exceptions.base.MockitoException: 

No tests found in LoginHistoryBLTestSuite
Is the method annotated with @Test?
Is the method public?

    at org.mockito.internal.runners.RunnerFactory.create(RunnerFactory.java:75)
    at org.mockito.internal.runners.RunnerFactory.createStrict(RunnerFactory.java:40)
    at org.mockito.junit.MockitoJUnitRunner.<init>(MockitoJUnitRunner.java:154)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at ....

如果我改变了

@RunWith(MockitoJUnitRunner.class)

@RunWith(Suite.class)

然后 mockito 期望因 NullPointerException 而失败。

【问题讨论】:

  • 我们不应该将@RunWith(MockitoJUnitRunner.class) 用于代表套件的类。现在,如果我们使用@RunWith(Suite.class) 运行它,这对我有用。你能分享代码和 NPE 堆栈跟踪吗?

标签: mocking junit4 test-suite


【解决方案1】:

就像 Anshul 在上面的评论中所说:您不应该使用 MockitoJunitRunner 运行您的 testSuite。

您可以在测试用例上使用 RunWith(MockitoJUnitRunner.class) 注释,或者更好地使用测试所需的少量静态导入。

一个例子是:

import static org.mockito.Mockito.verify;
(...)

public class ClassUnderTestTest {
  @Rule
  public MockitoRule mockitoRule = MockitoJUnit.rule();

  @Mock
  private ClassToMock mockClassInstance;

  @InjectMocks
  ClassUnderTest classUnderTestInstance;

  @Test
  public void testMethodFunctionality() throws Exception {
    classUnderTestInstance.callFunctionInMock()

    verify(mockClassInstance).calledFunction();
  }

AllTests 套件看起来像

@RunWith(Suite.class)
@SuiteClasses({ClassUnderTestTest.class})
public class AllTests {

}

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2019-10-06
    • 2018-08-31
    • 2021-08-26
    • 2012-05-21
    • 2015-05-22
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多