2009-11-28 13 views
71

我有一些測試正常工作。然後,我將它移到不同的軟件包中,現在出現錯誤。下面是代碼:Java JUnit:方法X對於類型Y不明確

import static org.junit.Assert.*; 
import java.util.HashSet; 
import java.util.Map; 
import java.util.Set; 

import org.jgrapht.Graphs; 
import org.jgrapht.WeightedGraph; 
import org.jgrapht.graph.DefaultWeightedEdge; 
import org.jgrapht.graph.SimpleWeightedGraph; 
import org.junit.*; 

@Test 
    public void testEccentricity() { 
     WeightedGraph<String, DefaultWeightedEdge> g = generateSimpleCaseGraph(); 
     Map<String, Double> eccen = JGraphtUtilities.eccentricities(g); 

     assertEquals(70, eccen.get("alpha")); 
     assertEquals(80, eccen.get("l")); 
     assertEquals(130, eccen.get("l-0")); 
     assertEquals(100, eccen.get("l-1")); 
     assertEquals(90, eccen.get("r")); 
     assertEquals(120, eccen.get("r-0")); 
     assertEquals(130, eccen.get("r-1")); 
    } 

的錯誤信息是這樣的:

方法的assertEquals(對象,對象)的曖昧JGraphtUtilitiesTest

我怎樣才能解決這個問題的類型?爲什麼當我將課程移至不同的包時會出現此問題?

+0

告訴我們如何你的班級被宣佈。在我看來,如果你從JUnit3繼承,然後試圖從JUnit4靜態導入。 – bmargulies 2009-11-28 00:32:32

+0

是的,實際上,我在包A中使用了JUnit3,並在包B中使用了JUnit4,我最初編寫了這些測試。然後我從套餐B切換到套餐A,出現問題。但是我沒有看到任何可以指示JUnit 3的類。 – 2009-11-28 00:38:52

+0

@Rosarch這些JGraphtUtilities在任何地方都可用嗎?我看不出在JGraphT中產生怪異的方法! – Nick 2012-12-13 12:17:06

回答

171

方法的assertEquals(對象,對象)不明確的類型......

這個錯誤是什麼意思是,你傳遞一個double和和Double到具有兩個不同簽名的方法:assertEquals(Object, Object)assertEquals(double, double)這兩個都可以被稱爲,感謝autoboxing。

爲避免含糊不清,請確保您撥打assertEquals(Object, Object)(通過兩個雙打)或assertEquals(double, double)(通過兩個雙打)。

所以,你的情況,你應該使用:

assertEquals(Double.valueOf(70), eccen.get("alpha")); 

或者:

assertEquals(70.0d, eccen.get("alpha").doubleValue()); 
+0

好的,或者我可以將它切換爲使用JUnit 4而不是JUnit 3.我該怎麼做? – 2009-11-28 01:38:44

+7

解決方案並非真正從一個版本切換到另一個版本。相反,如我所建議的那樣,幫助編譯器並消除模糊性。 – 2009-11-28 02:55:07

+1

無論如何,它不應該是assertEquals(70.0d,eccen.get(「alpha」)); ? – mhaller 2009-11-28 03:06:32

0

您可以使用該方法

assertEquals(double expected, double actual, double delta) 

哪會考慮舍入誤差是浮點數(例如參見this post)。你可以寫

assertEquals(70, eccen.get("alpha"), 0.0001); 

這意味着只要兩個值相差小於0.0001,它們就被認爲是等於。這有兩個好處:

  • 比較浮點值,因爲他們都應該
  • 無需投,因爲這三個參數斷言只applyes雙打,而不是通用對象
相關問題