JMockit Mocking java.net.URL导致测试无法运行

时间:2014-12-12 14:20:17

标签: url junit mocking jmockit

我在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)

1 个答案:

答案 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)是实际使用的吗?