0

最近、私は Sonar と Maven を使用して Java コードのカバレッジを調べるように割り当てられました。実行するmvn sonar:sonarと、ビルドは問題なく実行され、ダッシュボードから結果を確認できます。

ただし、テスト ケースはエラーとして出力されますが、正常に実行した場合はまったく発生しません。エラー スタック トレースは次のとおりです。

$Proxy11 cannot be cast to com.epsilon.agility.message.dao.MessageDAO
java.lang.ClassCastException: $Proxy11 cannot be cast to                    com.epsilon.agility.message.dao.MessageDAO
at  com.epsilon.agility.message.utils.MessageDBAdaptorService.getMessageDAO(MessageDBAdaptorSer vice.java:32)
at com.epsilon.agility.message.facade.MessageClassificationFacadeImpl.initilaizeDAOs(MessageClassificationFacadeImpl.java:91)
at com.epsilon.agility.message.facade.MessageClassificationFacadeImpl.<init>(MessageClassificationFacadeImpl.java:86)
at com.epsilon.agility.message.dao.test.TestMessageClassificationFacadeImpl.setUp(TestMessageClassificationFacadeImpl.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.internal.runners.ClassRoadie.runBefores(ClassRoadie.java:49)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:36)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)

エラーに関係するメソッドは次のとおりです。

@BeforeClass
@Transactional(propagation = Propagation.REQUIRED, timeout = 10)
public static void setUp() throws IOException {
    conn = TestDBUtils.getDBConnection();

    MessageDBAdaptorService.init(conn);

    msgclassificationFacade = new MessageClassificationFacadeImpl(conn);

    messageDAO = MessageDBAdaptorService.getMessageDAO();
    messageAssetDAO = MessageDBAdaptorService.getMessageAssetDAO();
    channelDAO = MessageDBAdaptorService.getChannelDAO();
    folderItemDAO = MessageDBAdaptorService.getFolderItemDAO();
    folderDAO = MessageDBAdaptorService.getFolderDAO();


    Assert.assertNotNull(messageDAO);
    Assert.assertNotNull(messageAssetDAO);
    Assert.assertNotNull(channelDAO);
    Assert.assertNotNull(folderItemDAO);
    Assert.assertNotNull(folderDAO);

}

オンラインで解決策を検索しましたが、ソナーには同様の解決策がないようです。テストケースは通常どおり正常に実行されるため、問題はテストケースに対するSonarの異なるアプローチに起因する可能性があると思われます。

上記で不十分な場合は、さらにコードと情報を投稿します。助けてくれてありがとう。

4

1 に答える 1

0

ソナーの問題ではないようです。スタック トレースから、maven Surefire プラグインは特定のテストを実行できないと想定しています。私があなたなら、次のようにします。- カスタム ビルドと Sonar が同じ Maven Surefire プラグイン バージョンを使用していて、同じ構成であることを確認します。

于 2012-07-13T12:16:14.393 に答える