2012-06-29 90 views
0

最近我被分配到使用Sonar和Maven來檢查Java代碼覆蓋率。我運行mvn sonar:sonar,構建出來就好,再加上我可以看到儀表板的結果。聲納上的java.lang.ClassCastException

但是,測試用例出現錯誤,如果我正常運行它,根本不會發生。以下是錯誤堆棧跟蹤:

$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不同方法,因爲測試用例正常運行正常。

如果以上不足,我會發布更多的代碼和信息。謝謝你的幫助。

回答

0

它似乎不是一個聲納問題。 從堆棧跟蹤我假設maven surefire插件不能執行特定的測試。 如果我是你,我會說以下。 - 驗證您的自定義構建和Sonar是否使用相同的Maven surefire插件版本並具有相同的配置。

+0

是的,我檢查了版本,顯然我不得不包括一些其他的依賴。現在它正在工作,所以謝謝! – vandershraaf