1

我正在开发一个项目,该项目具有依赖关系JUnit 4.11和传递依赖关系,JMock 2.6.0-RC2而后者又依赖于JUnit-dep 4.4. 的这种传递依赖JUnit-dep覆盖了我本地 pom for 中的设置JUnit。通过覆盖,我的意思是当我调用 JUnit 方法时,它会调用 v4.4 中的方法,而不是 v4.11。JMock添加 for和 for 的排除项JUnit-dep对我已解决的依赖项没有影响。

注意: JUnit andJUnit-dep有单独artifactId的 s,因此使用一个不会省略另一个。


上一个问题:JUnit 注释不起作用

我正在尝试使用 JUnit 的ExpectedException规则运行测试,但是当我运行测试时,似乎规则没有运行。在下面的代码中,如果规则不存在,异常会直接通过并未能通过测试。

我最近将项目的 Maven 依赖项从 4.3.1 更改为 4.11。我还对我的工作区做了一个干净的构建。我应该采取哪些步骤来解决这个问题?来自 Maven 的 trasitive 依赖项会让跑步者感到困惑吗?我怎么能说我正在使用 4.11 运行?

@Rule
public ExpectedException thrown= ExpectedException.none();

@Test
public void throwsNullPointerException() {
    thrown.expect(NullPointerException.class);
    throw new NullPointerException();
}

编辑:

我不知道这是否有帮助,但@RunWith(BlockJUnit4ClassRunner.class)在我的班级中名列前茅让我得到了这个:

java.lang.NoSuchFieldError: NULL
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:57)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    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)

编辑:

在 Eclipse 中通过 m2e 查看依赖项:当我检查我的 pom 的 Dependency Hierarchy 选项卡时,我在左侧显示 1 Resolved Dependency for JUnit:4.11 和多个(与 4.11 冲突省略)版本。此外,junit-dep 4.4还有一个已解决的依赖关系,jmock-junit4: 2.6.0-RC2 但是我已将此依赖关系标记为已排除(Right-click + Exclude Maven Artifact...)。此外,由于与我自己对JMock 2.1.0.

编辑: Ctrl+Shift+T RunWith尽管有排除,但显示 2 个版本,4.4 和 4.11。

编辑: 添加junit-dep 4.10“修复”问题的依赖项,最后省略了制作 4.4 版本的麻烦。然而,这似乎更像是一种破解而不是解决方案。

4

1 回答 1

0

看起来您的构建路径上的某处仍然有 JUnit 4.3(或至少是 4.5 之前的版本)。有关更多详细信息,请参阅 尝试使用 Spring 运行 jUnit 测试时的 NoSuchFieldError

于 2013-07-10T06:48:55.457 回答