2017-02-01 10 views
0

У меня есть следующий класс, который мне нужен для написания модульных тестов. Мне нужно проверить собственные вызовы MyClass.JMockit: проверить самоиспользуемые вызовы тестируемого объекта

public class MyClass { 
    public void init() { 
    } 

    public void testMethod() { 
    } 
} 

Я написал следующий тестовый класс для тестирования MyClass

public class MyClassTest { 
    @Tested 
    MyClass myClass; 

    @Test 
    public void initTest() { 
//  new Expectations(myClass) {{ 
//  }}; 
     myClass.init(); 
     new Verifications() {{ 
      myClass.testMethod(); 
     }}; 
    } 
} 

Как можно видеть, init() не вызывает testMethod(), но мое удивление, выше тест успешно.

Если я частично высмеиваю myClass, раскомментировав пустой Expectations блок выше, сбой теста с Missing invocation ошибкой. Поэтому мне кажется, что я должен частично издеваться над тестируемым объектом.

Но, частично издеваясь над тестовым объектом сложного класса, выдается множество исключений при тестировании, которое очень сложно отлаживать, поскольку точки останова в Intellij IDEA в этой ситуации не работают.

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

ответ

0

JMockit не может проверять вызовы метода на класс, не высмеиваемый. В вашем примере, как указано, с прокомментированным Expectations, объект myClass вообще не издевается, и проверки не могут фактически проверить, что методы на нем вызваны. Это не так, потому что вы проверяете объект @Tested; вы получите такую ​​же проблему, если бы создали новый List и попытались применить один из своих методов в Verifications.

+0

Теперь, если вы можете привести примеры «частичного издевательства тестового объекта сложного класса, бросающего [различные] исключения при тестировании», это было бы интересно посмотреть, потому что это не было моим опытом. – dcsohl