2017-01-12 37 views
2

我在powermock测试用例Maven中运行时,以下错误:@PowerMockIgnore项目层面

java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer" 

解决的方法是添加注释

@PowerMockIgnore("javax.management.*") 

的问题是我有很多的测试文件我必须添加这个注释。

有没有办法在项目级别或Maven中添加此项?

谢谢

+0

你是怎么找到这个“解决方案”:你可以通过添加文件到classpath中能够通过创建配置?因为它看起来更像是解决方案而不是解决方案... – Line

+0

@Line Nopes :(在理想的情况下,如果我们编写我们的代码可测试,我们绝不应该使用PowerMock – abhig

+0

但是什么“nopes”?你能告诉我这里@PowerIgnore来自,你是怎么发现它的? – Line

回答

1

我不认为这是可能的。

请记住,最后是执行那些测试用例的JUnit。逐个。而JUnit对周围的一个Maven“项目”一无所知。

JUnit只知道它即将处理的测试类中的元素。

因此:这些语句需要进入所有的测试用例;理想情况下仅限于那些真正需要它的人。

结束语:请不要误解我的意思,但在我看来,您真正的问题是您似乎在您的项目中不分青红皂白地使用PowerMock。这可能表明许多开发人员不知道如何编写可测试的代码 ...然后他们通过转向PowerMock来“修复”。迟早你有可能会后悔。

编辑:用于学习如何编写可测代码---开始here

+0

谢谢@GhostCat。我们正在努力使代码更易于测试 – abhig

+0

欢迎您FIES - 我添加了一个非常有用的链接,以防你想培训你的人如何使你的代码更可测试;-) – GhostCat

+1

谢谢@GhostCat – abhig

1

由于PowerMock 1.7.0,您可以使用configuration file指定要忽略的软件包。

powermock.global-ignore="org.myproject.*"

多个包/类可使用逗号来指定:

powermock.global-ignore="org.myproject.*","org.3rdpatproject.SomeClass"

此配置被应用到所有的测试类,在类路径。

org/powermock/extensions/configuration.properties