Метод JMockit, который не является поддельным, не работает

Образец класса

public class Test{
@Tested ClassA objA;

@Test(expected = MyException.class){
  String expectedVar = "expectedVar";
  new Expectations(objA)
  {
    {
      objA.someMethod();
      result = expectedVar;
    }
  };

  // So here is error, when I debug the programm it doesn't even enter following method.
  // If I connent out new Expectations(){{...}} block, only then the programm
  // will enter the method objA.execute()
  objA.execute();
}

Может ли кто-нибудь объяснить, что здесь происходит и почему установка ожиданий для одного метода меняет поведение другого метода?

2 ответа

Я не нашел ответа, поэтому я сделал это по-другому:

new MockUp<ClassA>()
{   
    @Mock
    String someMethod()
    {
        return expectedVar;
    }
};

И теперь все заработало как положено

На самом деле, тест работает отлично. Запустите следующий полный пример, и он пройдет:

public class ExampleTest {
    static class ClassA {
        String someMethod() { return ""; }

        void execute() {
            if ("expectedVar".equals(someMethod())) throw new MyException();
        }
    }

    static class MyException extends RuntimeException {}

    @Tested ClassA objA;

    @Test(expected = MyException.class)
    public void exampleTest() {
        final String expectedVar = "expectedVar";

        new Expectations(objA) {{ objA.someMethod(); result = expectedVar; }};

        objA.execute();
    }
}
Другие вопросы по тегам