Cześć, próbuję dopisać unit testy do kodu napisanego przez kogoś innego :/ i mam mały problem z mockami.
Mam coś mniej więcej takiego:
@Stateless
public class ABean implements A {
@Resource
private SessionContext context;
// UPLOAD FILE AND PARSING
@Override
public Long methodX(final String name) {
//do Something
final String status = context.getBusinessObject(A.class).veryfied(name);
//do Something
final int id = context.getBusinessObject(A.class).initiate(name);
final String result = context.getBusinessObject(A.class).doIt(id);
//doSomething
context.getBusinessObject(A.class).clean(id);
return result;
}
@Override
public String veryfied(final String name){
//do Something
}
@Override
public int initiate(final String name){
//do Something
}
@Override
public String doIt(final int id){
//do Something
}
@Override
public void clean(final String name){
//do Something
}
}
Napisałem mniej więcej coś takiego:
@RunWith(PowerMockRunner.class)
public class ABeanTest {
@Mock
private SessionContext sessionContext;
@InjectMocks
private ABean aBean = new aBean();
@Test
public void uploadFile() throws Exception {
when(sessionContext.getBusinessObject(A.class)).thenReturn(new ABean());
when(sessionContext.getBusinessObject(A.class).veryfied(anyString()).thenReturn(anyString());
when(sessionContext.getBusinessObject(A.class).initiate(anyString())).thenReturn(anyInt()));
when(sessionContext.getBusinessObject(A.class).doIt(anyInt()).thenReturn(anyString());
doNothing().when(sessionContext.getBusinessObject(A.class)).clean(anyInt());
aBean.methodX(testName);
verify(sessionContext.getBusinessObject(A.class), atLeastOnce()).initiateParsing(anyString());
}
}
Problem jest taki, że podczas odpalania testu leci nullPointer na lini when(sessionContext.getBusinessObject(A.class).veryfied(anyString()).thenReturn(anyString()); ponieważ chyba zaczyna wykonywać tą metodę, zamiast zwrócić anyString()
Nie wiem co robię źle :/