JUnit

junit doAnswer メソッド

doAnswer メソッド

Sapmle コード

public class Sample {

    @Inject
    PlusNumberService service;

    public int doSample(int number) {
        // 引数に +5 した上で呼び出す。
        return service.plus(number + 5);
    }

    public static class PlusNumberService {

        public int plus(int number) {
            // 引数に +10 した値を返却する
            return number + 10;
        }
    }
}

例: doSample(1) ⇒ 16

検証したい内容

plus メソッドに渡される引数が、doSample メソッドに渡した引数 + 5 の値であるか

テストコード

public static class sample {
    @InjectMocks Sample sample = new Sample();
    @Mock Sample.PlusNumberService serviceMock;

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

    @Test
    public void doSampleTest() {

        doAnswer(new Answer<Integer>() {
            @Override
            public Integer answer(InvocationOnMock invocation) throws Throwable {

                // plus メソッドに渡される引数が、doSample メソッドに渡した引数 + 5 の値であるか
                assertThat((Integer)invocation.getArguments()[0], is(6));

                return (Integer)invocation.callRealMethod();
            }
        }).when(serviceMock).plus(anyInt());

        // doSample(1) ⇒ 16
        assertThat(sample.doSample(1), is(16));
    }
}