Mockito - メソッドをスタブするときに NullpointerException が発生する 質問する

Mockito - メソッドをスタブするときに NullpointerException が発生する 質問する

そこで、Java Spring プロジェクトのテストを書き始めました。

私が使用するのは JUnit と Mockito です。when()...thenReturn() オプションを使用すると、サービスをシミュレートせずにモックできると言われています。そこで、次のように設定します。

when(classIwantToTest.object.get().methodWhichReturnsAList(input))thenReturn(ListcreatedInsideTheTestClass)  

しかし、どの when 節を実行しても、常に NullpointerException が発生します。これは、入力が null であるため当然のことです。

また、オブジェクトから別のメソッドをモックしようとすると、次のようになります。

when(object.method()).thenReturn(true)

メソッドには設定されていない変数が必要なので、ここでも Nullpointer が返されます。

しかし、この変数の作成などを回避するために、when()..thenReturn() を使用したいと思います。どのクラスがこのメソッドを呼び出しても、何があろうと、true または上記のリストが返されるようにしたいだけです。

これは基本的に私の側の誤解なのでしょうか、それとも他に何か問題があるのでしょうか?

コード:

public class classIWantToTest implements classIWantToTestFacade{
        @Autowired
        private SomeService myService;

        @Override
        public Optional<OutputData> getInformations(final InputData inputData) {
            final Optional<OutputData> data = myService.getListWithData(inputData);
            if (data.isPresent()) {
                final List<ItemData> allData = data.get().getItemDatas();
                    //do something with the data and allData
                return data;
            }

            return Optional.absent();
        }   
}

これが私のテストクラスです:

public class Test {

    private InputData inputdata;

    private ClassUnderTest classUnderTest;

    final List<ItemData> allData = new ArrayList<ItemData>();

    @Mock
    private DeliveryItemData item1;

    @Mock
    private DeliveryItemData item2;



    @Mock
    private SomeService myService;


    @Before
    public void setUp() throws Exception {
        classUnderTest = new ClassUnderTest();
        myService = mock(myService.class); 
        classUnderTest.setService(myService);
        item1 = mock(DeliveryItemData.class);
        item2 = mock(DeliveryItemData.class);

    }


    @Test
    public void test_sort() {
        createData();
        when(myService.getListWithData(inputdata).get().getItemDatas());

        when(item1.hasSomething()).thenReturn(true);
        when(item2.hasSomething()).thenReturn(false);

    }

    public void createData() {
        item1.setSomeValue("val");
        item2.setSomeOtherValue("test");

        item2.setSomeValue("val");
        item2.setSomeOtherValue("value");

        allData.add(item1);
        allData.add(item2);


}

ベストアンサー1

any()この問題が発生しましたが、問題は ではなく でメソッドを呼び出していたことですanyInt()。そのため、次のようになりました。

doAnswer(...).with(myMockObject).thisFuncTakesAnInt(any())

それを次のように変更する必要がありました:

doAnswer(...).with(myMockObject).thisFuncTakesAnInt(anyInt())

なぜ NullPointerException が発生したのかはわかりません。これが次の哀れな人の助けになるかもしれません。

おすすめ記事