这是测试场景:
Plugin A
有一个实用程序类A.xyz()
,它提供了一个抛出java.util.NoSuchtElementException
的方法
Plugin B
提供了"功能"。
CCD_ 5,它使用CCD_。
现在,我的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
,该CCD_14是使用不同的Classloader
作为测试本身加载的。
BTW:当作为插件测试启动时,该测试在Eclipse中运行,但当使用mvn install
从maven运行时失败
当m2e中的Maven落后时,我也看到过类似的事情发生。我会尝试以下方法来解决问题:
- 右键单击"项目"->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);
}
这是关于这个参数@Test.expected()
的javadoc
预期
public abstract Class<? extends Throwable> expected
(可选(指定
expected
,即Throwable
,以使测试方法在指定类的异常由该方法引发时成功。默认值:
org.junit.Test.None.class