2014-09-23 109 views
2

我有一個服務類有2種方法(一種是公共的,另一種是保護的)。我想單元測試我的代碼。下面是代碼片段 MyServiceClass.groovy模擬單元測試下的服務類中的方法

class MyServiceClass { 

     public boolean myMethod1() { 
      // some code 
      boolean success = myMethod2() 
      // some code 
     } 

     public boolean myMethod2() { 
      // some logic to return true/false 
      return true 
     } 

} 

MyServiceClassTests.groovy 

class MyServiceClassTests { 

     void testMyMethod1() { 
      // unit test code 
     } 

} 

在上面的單元測試代碼,我想嘲笑其通過myMethod1(),即調用myMethod2()的返回結果,這兩種方法都在同一服務類正在進行單元測試。如何嘲笑它並完成任務?

回答

1

你當然不能模擬被測試的類,否則你只是在測試一個模擬。

你可能會變得更好,將myMethod2()移到另一個班。考慮MyServiceClass是否爲trying to do too much

編輯

你問的答案,不需要移動myMethod2()

選項1

創建一個新的子類來爲待測試的類而不是MyServiceClass。您的新類應該擴展MyServiceClass,然後您可以覆蓋myMethod2()並提供不同的「僅測試」實現。

選項2

它可以使用Mockito to Spy the class under test,但這是相當一個非正統的方法。

我還是建議重構代碼,如果你有

+0

爲什麼我們不能這樣做..? – 2014-09-23 15:04:01

+1

因爲你必須在你的測試中實例化一個新的MyServiceClass(),所以你正在執行「真實」的代碼來測試。因此,同一個類不能成爲模擬對象。 – Brad 2014-09-23 15:11:24

+0

是他們的任何其他方式來解決這個iisue而不移動方法到任何一個類...? – 2014-09-23 15:15:02

相關問題