2013-02-25 61 views
2

我有以下方法....JMock的意外方法調用,不明白爲什麼

public void testa(Car car) { 
    em.persist(car); 
    car.setEngine(null); 

} 
在我的測試

我有:

保護的最終租車mockCar = context.mock(Car.class) ;

@Test 
public void testCar() { 
     context.checking(new Expectations() { 
      { 
       oneOf(em).persist(car); 
       oneOf(car).setEngine(null); 

        } 
      }); 
     this.stacker.testa(mockCar); 
     context.assertIsSatisfied(); 

} 

我運行此,我不斷收到:

意外調用car.setEngine(空)...

如果我刪除設定發動機的代碼和測試代碼測試通過... IM完全糊塗了,爲什麼發生這種情況...

例外:

java.lang.AssertionError:意外調用:car.setEngine(空) 沒有指定的期望:你是否... - 忘記開始一個基數條款的期望? - 調用模擬方法來指定期望參數?

+0

這段代碼編譯,甚至?您不要關閉'Expectations'實現或關於'checking'的調用。另外,你對'testa'的調用傳遞一個'Car'對象,但'testa'不帶任何參數。 您可以將代碼縮小到特定的失敗案例,然後發佈文件的全部內容嗎? – 2013-02-25 16:35:08

+0

是的,這一切編譯....我手寫它,因爲我在我的代碼中有很多意見... – user1555190 2013-02-25 16:38:32

回答

2

你的問題似乎是你有兩個Car對象。你有一個car,你設置的期望,和mockCar,你通過。沒有看到這些對象的定義,我不能肯定地說,但這可能是你的問題的根源。

如果這不是問題,我們將需要更多的代碼。最好是整個文件。

以供參考,該編譯罰款,並通過了測試:

+0

謝謝這有助於我有點....我認爲我遇到的問題是由於generica被應用...所以,而不是嘲笑我現在創建一個實例,並檢查該實例的車.. – user1555190 2013-02-26 10:35:44

+0

這是有道理的。我當時沒有考慮過這個問題,但是你的車不是合作者,爲什麼不實例化呢?很高興我幫了忙。 – 2013-02-26 18:12:51

相關問題