我在Eclipse中使用最新版本的junit和jmockit以及Oracle JDK 7。当我尝试模拟java.net.URL时,我的测试将无法运行。
我的代码中包含:
URL url = new URL("String representing the url.");
所以我想在我的测试中我可以这样嘲笑:
@Mocked private URL _url;
由于这几乎适用于其他所有内容,我知道URL是最终的,但我认为JMockit没问题。
当我在eclipse中使用上面的mock运行测试类时,结果是灰线(而不是绿色或红色)。所以我假设某种初始化问题。其余的测试或代码似乎并不重要,无论我把@Mocked线放进去,都会发生这种情况。
解决方法会很棒,对实际导致这种情况的解释会更好。任何帮助肯定是赞赏!谢谢!
快速举例。这实际上是一个例外,但我认为它基本上是我做过的事情:
package demo;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class Connecting {
public boolean connectionattempt() throws IOException {
URL url = new URL("http://nowhere/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection != null) {
return true;
}
else {
return false;
}
}
}
这个测试:
package demo;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import org.junit.Test;
import mockit.Expectations;
import mockit.Mocked;
import mockit.Tested;
public class TestConnecting {
@Mocked URL _url;
@Mocked HttpURLConnection _connection;
@Tested Connecting _sut;
@Test
public void testConnect() throws IOException {
new Expectations() { {
_url.openConnection(); result = _connection;
} };
assertEquals(true, _sut.connectionattempt());
}
}
和堆栈跟踪:
java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/junit/runner/TestReferenceFailure
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener.testFailure(JUnit4TestListener.java:91)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener.testFailure(JUnit4TestListener.java:69)
at org.junit.runner.notification.RunNotifier$4.notifyListener(RunNotifier.java:139)
at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:61)
at org.junit.runner.notification.RunNotifier.fireTestFailures(RunNotifier.java:134)
at org.junit.runner.notification.RunNotifier.fireTestFailure(RunNotifier.java:128)
at org.junit.internal.runners.model.EachTestNotifier.addFailure(EachTestNotifier.java:23)
at org.junit.runners.ParentRunner.run(ParentRunner.java:315)
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: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)
答案 0 :(得分:0)
我使用JMockit 1.13,JUnit 4.11和Oracle JDK 1.7.0_67在Eclipse Kepler SR2,IntelliJ IDEA 13.1和Netbeans 8.0.1上执行了测试。
每次都经过测试,全是绿色!所以,我不知道你的环境可能出现什么问题。您确定JMockit的“最新版本”(此时为1.13)是实际使用的吗?