Как смоделировать параметр, который передается в конструктор - PullRequest
0 голосов
/ 04 марта 2020

У меня есть класс, как показано ниже

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);
    }
}

У меня есть следующие вопросы / проблемы:

  1. Как видите, я хочу смоделировать возвращаемое значение objB. Могу ли я передать макетированный объект objB в конструктор, когда я создаю экземпляр класса CLZA? я должен издеваться над CLZA также? Если мне нужно смоделировать CLZA, как я могу связать его с моим смоделированным objB?

  2. Прямо сейчас я продолжаю получать исключение NullPointerException в строке strBuilder.append("This is the line I got NPE now");. Кажется, strBuilder не создан. Кто-нибудь может помочь с тем, как провести тестирование в этом сценарии?

Оцените его.

1 Ответ

0 голосов
/ 04 марта 2020

Оказывается, NPE была вызвана другой проблемой. Этот юнит-тест работает нормально. Извините за заблуждение.

...