У меня есть класс, как показано ниже
public Class CLZA {
private Object obj1;
private Object obj2;
private StringBuilder strBuilder;
public CLZA (CLZB objB) {
obj1 = objB.fetchValueOfObj(Request.type1);
obj2 = objB.fetchValueOfObj(Request.type2);
strBuilder = new StringBuilder();
}
public double computeValue(...) {
if (this.obj1 == 1.0) {
...
}
if (this.obj2 == 2.0) {
...
}
strBuilder.append("This is the line I got NPE now");
}
}
Сейчас я пытаюсь сделать что-то подобное.
@RunWith(PowerMockRunner.class)
@PrepareForTest({CLZA.class, StringBuilder.class})
public class ClzATest {
private CLZA objA;
@Mock
private CLZB objB;
@Before
public void setUp() throws Exception {
objA = new CLZA(objB);
when(objB.fetchValueOfObj(any(Request.class))).thenAnswer(
invocation -> {
Object argument = invocation.getArguments()[0];
if (argument.equals(Request.type1)) {
return 1.0;
} else if (argument.equals(Request.type2)) {
return 2.0;
} else {
return 0.0;
}
});
}
@Test
public void testComputeValue() {
double value = objA.computeValue(...);
assertEquals(2.0, value);
}
}
У меня есть следующие вопросы / проблемы:
Как видите, я хочу смоделировать возвращаемое значение objB. Могу ли я передать макетированный объект objB в конструктор, когда я создаю экземпляр класса CLZA? я должен издеваться над CLZA также? Если мне нужно смоделировать CLZA, как я могу связать его с моим смоделированным objB?
Прямо сейчас я продолжаю получать исключение NullPointerException в строке strBuilder.append("This is the line I got NPE now");
. Кажется, strBuilder не создан. Кто-нибудь может помочь с тем, как провести тестирование в этом сценарии?
Оцените его.