2017-07-18 50 views
0

我有一個類需要進行單元測試。的結構如下:Easymock新的對象和處理它的函數調用(沒有PowerMock)

public class classToBeTested{ 
    public returnType function1(){ 
     //creation of variable V 
     return new classA(V).map(); 
    } 
} 

類CLASSA如下:

public class classA{ 
    //Constructor 
    public returnType map(){ 
     //Work 
    } 
} 

我創建使用FunSuite,GivenWhenThen和EasyMock的Scala中的單元測試。
我的測試結構如下:

class classToBeTested extends FunSuite with GivenWhenThen with Matchers with EasyMockSugar { 
    test(""){ 
     Given("") 
     val c = new classToBeTested() 
     expecting{ 
     } 
     When("") 
     val returnedResponse = c.function1() 
     Then("") 
     //checking the returned object 
    } 
} 

我需要什麼,在期待寫?
我該如何處理上述情況?

注意:PowerMock不能使用。

回答: 謝謝,@亨利。經過大量的搜索和@Henri提供的答案,重構代碼是處理這種情況的最佳方式。原因如下:

單元測試不能模擬由new調用(沒有PowerMock)創建的對象。因此,爲了測試代碼,我們需要根據正在使用的類中存在的條件(此處爲classA)在要測試的類中編寫單元測試(此處爲classToBeTested)。因此,在測試classToBeTested時,我們需要了解classA的功能和結構,並分別創建測試用例。

由於現在測試案例取決於classA中方法的結構,暗示classToBeTestedclassA緊密耦合。因此,通過TDD方法,我們需要重構代碼。
在上面的例子:
而不是使用

classA object = new classA(V); 

它更好地提供對象的方法(例如:自動裝配Spring MVC中的classA object)。

接受建議。如果有人可以給出更好的解釋,請做到這一點。

回答

0

你不行。你想要模擬的實例是你想要測試的類。因此,如果沒有powermock,您需要重構才能使其工作。

最小的是提取類創建成另一種方法

public class classToBeTested{ 
    public returnType function1(){ 
     //creation of variable V 
     return getClassA(V).map(); 
    } 

    protected classA getClassA(VClass v) { 
     return new classA(v); 
} 

然後,你可以做一個局部的模擬。我不知道如何在Scala中做到這一點,所以下面的代碼可能是錯誤的,但我希望你能明白。

class classToBeTested extends FunSuite with GivenWhenThen with Matchers with EasyMockSugar { 
    test(""){ 
     Given("") 
     val c = partialMockBuilder(classToBeTested.class).addMockedMethod("getClassA").build() 
     val a = mock(classA.class) 
     expecting{ 
      expect(c.getClassA()).andReturn(a) 
      expect(a.map()).andReturn(someReturnType) 
     } 
     When("") 
     val returnedResponse = c.function1() 
     Then("") 
     //checking the returned object 
     // whatever you need to check 
    } 
} 
+0

我沒有嘗試部分模擬方法。但重構是目前沒有動力鎖的最佳選擇。 –

相關問題