2014-07-25 17 views
2

我做了一個使用hamcrest matchers的測試套件,一切正常,直到我在不同的機器上移動項目。Hamcrest assertThat在項目移動時不起作用

我得到的錯誤是:

The method assertThat(T, Matcher<? super T>) in the type MatcherAssert is not applicable 
for the arguments (Object, Matcher<Double>) 

任何想法,爲什麼我得到它,以及如何解決?

而且錯誤不會出現所有assertThat交鋒中,一些被認爲是正確的,儘管他們有雙重的匹配...

+0

忘了提,我不知道是什麼錯誤意味着,只是不知道爲什麼我得到它... – iyiyy

+0

只是不言自明的,你需要找到兩種環境之間有什麼不同。我首先看的是JVM版本。你是否在第二臺機器上重新編譯,或者只是運行預編譯的代碼? – GreyBeardedGeek

+0

據我所知JVM是相同的。是的,我重新編譯,以及至少... – iyiyy

回答

1

首先,你應該說明你所得到的錯誤在編譯時不是運行時。問題是Double不是Objectsuper。所以你在編譯時調用assertThat(someObject, someDoubleMatcher)不符合要求的簽名。然而,這將在運行時正常工作,因爲Matcher將檢查類型。

莫非選項...

// cast expected to object so that created matcher is Matcher<Object> 
assertThat(myObject, CoreMatchers.equalTo((Object)myDouble)); 

// cast actual value to double so that both value and matcher are Double 
assertThat((Double)myObject, equalTo(myDouble)); 

// cast Matcher to raw type so generics will be ignored 
assertThat(myObject, (Matcher) equalTo(myDouble)); 
+0

非常感謝,這固定它! 也感謝關於說其編譯時錯誤而不是運行時錯誤的提示。 – iyiyy

+0

也可以看到我完全不瞭解錯誤...... – iyiyy

相關問題