JMockit을 사용하고 있습니다. 나는 방법을 조롱하고있다. 그 실제 메소드가 호출 되어야만 조롱 된 메소드가 한번 호출되어야한다. 내가 사용하고있는 코드를 제공하고있다. Jockock에서 조롱 중지
package StopMocking;
public class ClassToMock
{
public int methodToMock()
{
return 2;
}
}
이
내가이 테스트 클래스입니다package StopMocking;
public class ClassToTest
{
public void methodToTest()
{
ClassToMock classToMockInstance = new ClassToMock();
System.out.println(""+classToMockInstance.methodToMock());
}
}
을 테스트하고있는 클래스입니다.
package StopMocking;
import org.junit.Test;
import mockit.Mocked;
import mockit.NonStrictExpectations;
public class TestAClass
{
@Mocked("methodToMock") ClassToMock classToMockMockedInstance;
@Test
public void test1()
{
new Expectations(classToMockMockedInstance)
{
{
classToMockMockedInstance.methodToMock();returns(1);
}
};
(new ClassToTest()).methodToTest();
//Some code for stoping mocking
(new ClassToTest()).methodToTest();//It should display 2
}
}
나는 새로운 기대 (classToMockMockedInstance)를 사용하고는이 예외를 던지고있다
테스트를 작성하는mockit.internal.MissingInvocation: Missing invocation of:
StopMocking.ClassToMock#methodToMock()
on mock instance: [email protected]
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: Missing invocation
at StopMocking.ClassToMock.methodToMock(ClassToMock.java)
at StopMocking.TestAClass$1.<init>(TestAClass.java:21)
at StopMocking.TestAClass.test1(TestAClass.java:18)
... 6 more
그냥 두 가지 테스트를 작성할 수 있습니까? 하나는 조롱으로, 다른 하나는 테스트없이 작성할 수 있습니까? –
@ Rogério에 관심을 가져 주셔서 감사합니다. 이 특별한 예제에서는 두 가지 테스트 케이스를 작성할 수 있습니다. 그러나 이것은 sceneario입니다. JMockit이나 다른 옵션에서 사용할 수있는 기능이있는 경우 해당 메서드를 조롱 한 후 메서드를 한 번만 호출한다는 것을 알고 싶습니다. – Varun
예, 부분적으로 조롱 된 인스턴스에 * strict expectation을 기록 할 수 있습니다 :'new Expectations (someObj) {...}'. 첫 번째 호출 만이 예상과 일치합니다. 추가 호출이 있으면 실제 코드가 실행됩니다. 또 다른 방법은 Delegate 메소드의'proceed()'에 대한 조건부 호출과 함께'Delegate' 객체를 사용하는 것입니다.이 메소드는 첫 번째 매개 변수가'Invocation' 유형입니다. 공식 문서에 많은 예제가 있으므로 여기에 예제를 제공하지 않겠습니다. –