Как издеваться над инъекцией бобов в Mockito? - PullRequest
0 голосов
/ 26 марта 2019

Этот тест работает:

@RunWith(MockitoJUnitRunner.class)
public class Test1 {

    @InjectMocks private MyBean bean;       

    @Test
    public void shouldWork() {      
        bean.test("ABC");       
    }
}

@Stateless
public class MyBean {

    public String test(String s) {
        System.out.println("This is a test " + s);
        return s;
    }
}

Теперь я хочу внедрить новый EJB MyBean2 в MyBean и провести повторную проверку.Для этого я также издеваюсь над MyBean2 в Test1.Это новый тест:

@RunWith(MockitoJUnitRunner.class)
public class Test1 {

    @Mock MyBean2 bean2;        
    @InjectMocks MyBean bean;       

    @Test
    public void shouldWork() {
         bean.test("ABC");      
    }

}


@Stateless
public class MyBean {

    @Inject
    MyBean2 bean2;

    public String test(String s) {
        return s + bean2.test2();
    }
}


@Stateless
public class MyBean2 {
    public String test2() {
        return "DEF";
    }
}

Но когда я запускаю это, я получаю NullPointerException, когда бин пытается вызвать метод bean2, возможно, потому что Mockito не распознает введенный бин как EJB.

Как заставить это работать?

1 Ответ

2 голосов
/ 26 марта 2019

Взгляните на Javadoc @InjectMocks.В нем говорится, что вы должны вызвать инициацию используемых макетов, позвонив в вашем случае:

@RunWith(MockitoJUnitRunner.class)
public class Test1 {
    @InjectMocks
    MyBean bean;
    @Mock
    MyBean2 bean2;

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

    @Test
    public void shouldWork() {
        when(bean2.test2()).thenReturn("mocked return");
        assertThat(bean.test("ABC")).isEqualTo("ABCmocked return");
    }
}
...