0

私は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 および catch 句を追加しましたが、成功しませんでした。

その例外に対して一意のクラスローダーを設定するにはどうすればよいですか? それはそれを解決するための正しいアプローチですか?それとも、何か他のもので試してみるべきですか?Maven の設定に何か問題があるのでしょうか? アイデアやコメントは大歓迎です:)

4

0 に答える 0