2017-08-18 10 views
0

Junitの新機能です。以下の問題の解決策が歓迎されます。 私がテストしながら、はい、私はあらゆる種類のDNEていないことを認識していますメインクラスのような、Junitを使用して自動フィールドをテスト中にエラーが発生する

@Service 
public class MainClass extends AbstractClass { 

@Autowired 
ClassA a; 

@Autowired 
ObjectMapper mapper; 

public void methodA(){ 
.... 
AnotherClass obj= (AnotherClass)mapper.readerFor(AnotherClass.class).readValue(SOME_CODE); 
....... 
} 

テストクラスがあり、

@RunWith(PowerMockRunner.class) 
@PrepareForTest({MainClass.class}) 
public class MainClassTest { 

@Mock 
ClassA a; 

@Mock 
ObjectMapper mapper; 

@InjectMocks 
MainClass process = new MainClass(); 

//I have to do somthing for Autowired mapper class of main in test class as well 

@Test 
public void testProcessRequest() throws Exception{ 
    process.methodA() 
} 

Amはメインクラスでマッパーオブジェクトにnullを取得してい初期化。 junitマッパーを書くためのよりよい方法がありますか? 注: "readerFor"で例外をスローするObjectMapperの@Mockを試しました。 ありがとうございます。

答えて

0

Mockito/powerMockを使用する必要はありません。ちょうど春のブートテストを使用してください。このような 何か:

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.test.context.junit4.SpringRunner; 

import com.fasterxml.jackson.databind.ObjectMapper; 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class SomeServiceTest { 

    @Autowired 
    private SomeService service; 

    @Autowired 
    private ObjectMapper om; 

    @Test 
    public void try_Me(){ 
     System.out.println(om); 
    } 
} 

あなたの質問にいくつかの情報の詳細を追加します。 ObjectMapperに実際にmockitoを使用する場合は、モックを準備する必要があります。 readerFor(...)を呼び出していない場合、モックはデフォルトでnullを返し、後でreadValueメソッドでnullpointerを取得します。

モックのための基本的な準備は次のようになります。

ObjectReader or = Mockito.mock(ObjectReader.class); 
Mockito.when(or.readValue(Mockito.anyString())).thenReturn(new instance of your object); 
Mockito.when(mapper.readerFor(User.class)).thenReturn(or); 
+0

おかげMockitoの作品!! – RajeysGS

関連する問題