私はこのテストを実行しようとします:
@Mock IRoutingObjHttpClient routingClientMock;
@Mock IRoutingResponseRepository routingResponseRepositoryMock;
@Test
public void testSendRoutingRequest() throws Exception {
CompleteRoutingResponse completeRoutingResponse = new CompleteRoutingResponse();
completeRoutingResponse.regression_latencyMillis = 500L;
Mockito.when(routingClientMock.sendRoutingRequest(any(RoutingRequest.class))).thenReturn(completeRoutingResponse);
RoutingObjHttpClientWithReRun routingObjHttpClientWithReRun = new RoutingObjHttpClientWithReRun
(routingClientMock, routingResponseRepositoryMock);
...
}
しかし、私はNullPointerExceptionを取得します:
Mockito.when(routingClientMock.
私は何が欠けていますか?
@Mock
アノテーションを使用する場合は、MockitoJUnitRunner
を使用する必要があります
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock
private IRoutingObjHttpClient routingClientMock;
@Test
public void testSendRoutingRequest() throws Exception {
// ...
}
}
このチュートリアル も参照してください。
@Mock
注釈をアクティブにするための3つのオプションがあります。 MockitoRule
を使用する私見は最良の方法です。 Parameterized
。
MockitoRule を使用します
public class MockitoTest {
@Mock
private IRoutingObjHttpClient routingClientMock;
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Test
public void testSendRoutingRequest() throws Exception {
// ...
}
}
MockitoJUnitRunner を使用します
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock
private IRoutingObjHttpClient routingClientMock;
@Test
public void testSendRoutingRequest() throws Exception {
// ...
}
}
MockitoAnnotations.initMocks(this) を明示的に呼び出します。これは、qn @Before
メソッド、独自のランナー、または独自のルールで実行できます。
public class MockitoTest {
@Mock
private IRoutingObjHttpClient routingClientMock;
@Before
public void createMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testSendRoutingRequest() throws Exception {
// ...
}
}
@RunWith(SpringJUnit4ClassRunner.class)
を使用する必要がありますMockitoAnnotations.initMocks(this);
を呼び出す必要がありますまた、インポートの問題になる可能性があるため、適切なインポート済みパッケージがあることを確認してください。
たとえば、「org.easymock」パッケージには@Mockという注釈もありますが、これはもちろんMockito固有のセットアップでは機能しません。
呼び出しているメソッドがfinalメソッドかどうかを確認してください。
Mockitoは最終メソッドをモックできません。 https://github.com/mockito/mockito/wiki/FAQ
テストクラスで_junit.jupiter
_を@ExtendWith(MockitoExtension.class)
とともに使用するが、モックがnullの場合、_@Test
_アノテーションがインポートされることを確認します
_import org.junit.jupiter.api.Test;
_
_org.junit.Test;
_の代わりに
Junit5を使用している場合、「@ RunWith」アノテーションがなくなるため、同じ問題が発生する可能性があります。
この場合、クラスに次の注釈を付ける必要があります。
@ExtendWith(MockitoExtension.class)
public class MyTestClass {
...
依存関係にもインポートする必要があります(Maven-pom.xml):
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>