【发布时间】:2015-11-13 16:13:27
【问题描述】:
我是 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:缺少对模拟类型的调用 这点;请确保此类调用仅在 声明一个合适的模拟字段或参数 SecondTest$1.(SecondTest.java:17) 在 SecondTest.testXi(SecondTest.java:12) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
我在代码中找不到任何错误。
【问题讨论】:
-
您到底在哪里搜索过? JMockit 文档(入门页面、教程、API 文档)明确指出,在记录期望值之前,需要使用其中一种模拟注释来模拟类型。此外,这就是错误消息的含义:“...确保此类调用仅在声明合适的模拟字段或参数之后出现”。
标签: java unit-testing junit jmockit