Jmockit 模拟问题
Jmockit mocking issue
我是 Junit 和 Jmockit 的新手。我写了一个例子,想用模拟来测试它,但我遇到了一个错误。
public class First {
public static int square(int number) {
int result = number * number;
return result;
}
}
public class Second {
public static void main(String[] args) {
int number = 5;
number = new Second().xi(number, number);
System.out.println(number);
}
public int xi(int number, int number1) {
number = First.square(number) + First.square(number1);
return number;
}
}
public class SecondTest {
Second second = new Second();
@Test
public void testXi() {
new Expectations() {
{
First.square(5);
result = 25;
}
};
int mk = second.xi(5, 5);
assertEquals(50, mk);
}
}
当我尝试 运行 这个 SecondTest.java 时,我收到了以下错误。
java.lang.IllegalStateException: Missing invocation to mocked type at
this point; please make sure such invocations appear only after the
declaration of a suitable mock field or parameter at
SecondTest.(SecondTest.java:17) at
SecondTest.testXi(SecondTest.java:12) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
java.lang.reflect.Method.invoke(Method.java:606) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
java.lang.reflect.Method.invoke(Method.java:606) at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
我在代码中找不到任何错误。
您应该在测试 class 中声明类似 @Mocked First firstInstance
的内容(class 级别,而不是方法级别)。
那么你需要做出预期firstInstance.square(5); result = 25
这实质上告诉 jmockit 您希望 First class 被模拟出来,并且它应该将 First class 的所有实例与实例 firstInstance 交换。然后你告诉它你期望调用这个实例来调用方法 xi(int, int),值为 5, 5,你希望它返回 return 25。
我是 Junit 和 Jmockit 的新手。我写了一个例子,想用模拟来测试它,但我遇到了一个错误。
public class First {
public static int square(int number) {
int result = number * number;
return result;
}
}
public class Second {
public static void main(String[] args) {
int number = 5;
number = new Second().xi(number, number);
System.out.println(number);
}
public int xi(int number, int number1) {
number = First.square(number) + First.square(number1);
return number;
}
}
public class SecondTest {
Second second = new Second();
@Test
public void testXi() {
new Expectations() {
{
First.square(5);
result = 25;
}
};
int mk = second.xi(5, 5);
assertEquals(50, mk);
}
}
当我尝试 运行 这个 SecondTest.java 时,我收到了以下错误。
java.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter at SecondTest.(SecondTest.java:17) at SecondTest.testXi(SecondTest.java:12) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.lang.reflect.Method.invoke(Method.java:606) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.lang.reflect.Method.invoke(Method.java:606) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
我在代码中找不到任何错误。
您应该在测试 class 中声明类似 @Mocked First firstInstance
的内容(class 级别,而不是方法级别)。
那么你需要做出预期firstInstance.square(5); result = 25
这实质上告诉 jmockit 您希望 First class 被模拟出来,并且它应该将 First class 的所有实例与实例 firstInstance 交换。然后你告诉它你期望调用这个实例来调用方法 xi(int, int),值为 5, 5,你希望它返回 return 25。