При попытке заглушить макет, который уже заглушен, я получил исключение UnfinishedStubbingException - PullRequest
1 голос
/ 17 марта 2019
public void testFunction() throws Exception {

    ABC mock1= mock(ABC.class);
    when(mock1.getValue()).thenReturn("string1");
    whenNew(ABC.class).withNoArguments().thenReturn(mock1);
    Student student= setHardCodeValuesToStudentObject();

    Method method = Person.class.getDeclaredMethod("conversion", 
                                                     Student.class);
    method.setAccessible(true);
    String actualConvertedValue = (String)method.invoke(new Person(), 
                                                          student);


    ClassLoader classLoader = this.getClass().getClassLoader();
    InputStream inputStream = 
         classLoader.getResourceAsStream("expectedConvertedValue.json");
    String expectedConvertedValue= "";
    try {
        expectedConvertedValue= IOUtils.toString(inputStream, 
                                       StandardCharsets.UTF-8);
    }catch (Exception e) {
        System.out.print(e.printStackTrace());       
       }
    assertEquals(expectedConvertedValue,actualConvertedValue );
    }

Это мой тестовый пример для метода, в котором одно значение преобразуется в другой формат. Поэтому я проверяю ожидаемое преобразование и фактическое преобразование.

setHardCodeValuesToStudentObject () устанавливает некоторые жестко закодированные значения для объекта ученика, такие как (name = "jack", age = "12" и т. Д.), И внутри этого метода есть один макет, и на этом макете происходит заглушка. Мне нужно смоделировать метод, потому что внутри setHardCodeValuesToStudentObject (), жестко закодированное значение getValue () генерируется автоматически. Он увеличивается, когда какая-то другая строка кода добавляется перед этой строкой. Поэтому я должен высмеивать это значение.

Когда я пытаюсь смоделировать метод внутри этого метода (setHardCodeValuesToStudentObject ()), тогда он выбрасывает это ----->

   org.mockito.exceptions.misusing.UnfinishedStubbingException: 
   Unfinished stubbing detected here:
   -> at 
   com.print.view.ModelTest.setUpTransactionAnnotation(ModelTest.java:653)

    E.g. thenReturn() may be missing.
    Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
 Hints:
  1. missing thenReturn()
  2. you are trying to stub a final method, you naughty developer!
  3: you are stubbing the behaviour of another mock inside before 
  'thenReturn' instruction if completed
...