Java 使用预期的异常和Powermock执行TestNG时发生链接错误

Java 使用预期的异常和Powermock执行TestNG时发生链接错误,java,testng,powermock,powermockito,linkageerror,Java,Testng,Powermock,Powermockito,Linkageerror,我正在从事一个Maven项目,并尝试使用以下结构执行TestNG单元测试: import org.testng.*; @PrepareForTest(GeneralDAO.class) @PowerMockIgnore({"javax.management.*"}) public class TestClass extends PowerMockTestCase { @Test(expectedExceptions = BusinessException.class) // cust

我正在从事一个Maven项目,并尝试使用以下结构执行TestNG单元测试:

import org.testng.*;

@PrepareForTest(GeneralDAO.class)
@PowerMockIgnore({"javax.management.*"})
public class TestClass extends PowerMockTestCase {

    @Test(expectedExceptions = BusinessException.class) // custom exception from another project
    public void testFailToGetBusiness() {

        // method that shoud throw a BusinessException

    }
}
但在运行测试时,我发现以下异常:

java.lang.LinkageError: loader constraint violation: when resolving method "com.company.exception.BusinessException.<init>(Ljava/lang/Exception;Lcom/company/exception/EExceptionCodes;)V"
the class loader (instance of org/powermock/core/classloader/MockClassLoader)
of the current class, com/company/core/BusinessHandler, 
and the class loader (instance of sun/misc/Launcher$AppClassLoader) for the method's defining class, com/company/exception/BusinessException, 
have different Class objects for the type com/company/exception/EExceptionCodes used in the signature
据我所知,powermock在测试环境中使用MockClassLoader加载对象,Sun使用他的AppClassLoader加载相同的对象。由于类加载器不同,在运行时,对象也会超出它们的范围,因为它们具有相同的名称,这意味着LinkageError

无论如何,我尝试了几种方法来避免这种情况,例如删除expectedExceptions标记并添加try-and-catch子句,但没有成功


如何为该异常设置唯一的类装入器?这是解决问题的正确方法吗?还是我应该试试别的?我的Maven配置可能有问题吗?欢迎提出任何想法或意见:

您使用哪个testng版本?您尝试过最新版本吗?您使用哪个powermock版本?1.6.3在几天前发布,powermock存在一些类路径问题。ie:嗨,我正在使用TestNG 6.9.6和powermock 1.6.3。据我所知,他们是最晚的。@juherr谢谢你的推荐。我发现评论的这一部分很有趣:问题是MockClassLoader没有提供对它加载的mock类的引用。。也许这是问题的根源,但目前我不确定是否能找到解决办法,甚至不确定解决办法是否是最好的解决方案。作为一种解决办法,您还可以准备异常类并使用@PrepareForTest对其进行注释,以使MockClassLoader加载异常类,您还需要使用try-and-catch,而不是expectedException。