2017-11-01 16 views
-2

私はMockitoを初めて使用していますが、ユニットテスト中にはnullポインタ例外が発生しています。誰かが私がここで間違っていることを教えてもらえますか?以下に試験する必要があるサービス方法であってMockitoテストが動作しない

class a{ 
    public List<String> getabc(String div){ 
    ResponseEntity<SD> sd = resttemplate.getforEntity("http://localhost:8080/abc/"+div,SD.class); 
    if(sd !=NULL && sd.getstatuscode() == HTTPstatus.oK){ 
    return sd.getbody().getsd(); 
    } 
    } 

Public class testa{ 
    @Mock 
    Resttemplate resttemplate;//mocking resttemplate 

    @InjectMocks 
    private a a1= new a(restTemplate); //injectingmocks to the service 

    @Test 
    public void testmetha(){ 
    List<String> ts = new ArrayList<>(); 
    ts.add("t1"); 
    ts.add("t2"); 
    SD sd = new SD(); 
     sd.setid(ts); 
    ResponseEntity<SD> rs = new ResponseEntity<SD>(sd, HTTPSTATUS.OK); 
    when(resttemplate.getforEntity("http://localhost:8080/abc/25",SD.class)).thenReturn(rs); 
    ts = a1.getabc("25"); 
    assertEquals(3, a1.getabc("25").size()); 
    } 
    } 

それにヌル・ポインタ例外を与える - TS = a1.getabc( "25");

+0

http://idownvotedbecau.se/noexceptiondetails/、少なくとも例外スタックトレースも投稿してください。 – Alex

+0

上記の行に例外がありませんか?これは、Mockito JUnit RunnerまたはMockito JUnitルールを使用していない場合に発生します。 –

+0

はい、この行だけで起こっていることを確認してください。 – user3378550

答えて

1

からインスタンスの作成を削除します。

@InjectMocks 
private a a1= new a(restTemplate); //injectingmocks to the service 

それは次のようになります。

@InjectMocks 
private a a1; 

Mockitoは、自動的にあなたのコンストラクタを検出し、あなたのオブジェクトを構築するためのモックを注入します。それ以外の場合、正しく動作しないことがあります。

さらに、モックが適切に初期化されていることを確認し、テストクラス@RunWith(MockitoJUnitRunner.class)のランナーを使用するか、@Beforeコードで実行してください。

@Before 
public void initMocks() { 
     MockitoAnnotations.initMocks(this); 
} 
+1

'@ InjectMocks'は指定されたインスタンスでうまく動作するはずです。 Mockitoが*コンストラクタインジェクション*(JavaDocsを参照)を使用しないようにするだけです。あなたの第2の観察は、問題の原因である可能性が非常に高いです。 –

+0

面白い、ありがとう。 – staszko032

+0

まだ動作していません。同じヌルポインタ例外。 – user3378550

関連する問題