这是测试场景:
Plugin A
有一个实用程序类A.xyz()
,它提供了一个抛出java.util.NoSuchtElementException
Plugin B
提供"功能"。
Fragment F
使用B
作为主机并为B
提供测试。
现在,我的JUnit测试看起来像这样:
try {
A.xyz(paramTriggeringNoSuchMethodException);
fail('A.xyz did not throw NoSuchElementException');
} catch (NoSuchElementException e) {
// expected
}
所以,我希望A.xyz()
抛出NoSuchElementException
并明确地捕捉到这个异常,但测试仍然没有告诉我有一个NoSuchtElementException
(我刚抓到自己)。
如果我抓住Throwable
而不是NoSuchElementException
,则测试将通过。
如果所有插件/片段在同一环境中运行,那怎么可能呢?
似乎A.xyz()
抛出NoSuchElementException
,使用不同的Classloader
加载mvn install
作为测试本身。
答案 0 :(得分:0)
我看到当m2e中的Maven落后时,会发生类似的事情。我会尝试以下方法来解决问题:
mvn clean
,然后再次尝试mvn install
。throwable.getClass().getName()
和throwable.getClass().getClassLoader()
的输出,看看它们是否在Maven JUnit和Eclipse JUnit中返回相同的输出。顺便说一下,为什么你的JUnit测试中有try-catch
块?我会改为:
@Test(expected=NoSuchElementException.class) {
public void testNoSuchElement() {
A.xyz(paramTriggeringNoSuchMethodException);
}
Here's the javadoc on this parameter, @Test.expected()
预期
public abstract Class<? extends Throwable> expected
(可选)指定
expected
,Throwable
,以便在方法抛出指定类的异常时使测试方法成功。默认:强>
org.junit.Test.None.class