2013-11-26 63 views
1
MyClass{ 

public void myfunction(){ 
AnotherClass c=new AnotherClass(); 
c.somethod();//This method sets some values of the AnotherClass object c; 

} 
} 

我上面的場景是tested.How我是否AnotherClass對象ç的值設置properly.I明白,我必須使用這些模擬對象。但無法弄清楚,因爲在這裏我無法將AnotherClass的模擬對象傳遞給我的功能,因爲上述設計。可以有人幫助我嗎?Junit的使用模擬對象

+0

嘗試測試調用myfunction()方法的結果。如果變量'c'是方法局部變量當你調用c.somethod()時會發生什麼?外部可觀察到的結果是什麼? –

+0

結果不能從外部獲得。 c.somemethod()設置在myfunction() – user1312312

+0

中創建的c的值,您應該以某種形式對外部可用的單元測試功能進行單元測試。如果做c.somethod()沒有做任何外部可見的然後恕我直言,你不需要單元測試它 –

回答

1

,如果你真的想這樣做應該做的重新設計類似如下(丹還建議)

import org.junit.Test; 
import org.mockito.Mockito; 

public class TestingMock { 

    @Test 
    public void test() { 
     MyClass target = Mockito.spy(new MyClass()); 
     AnotherClass anotherClassValue = Mockito.spy(new AnotherClass()); 
     Mockito.when(target.createInstance()).thenReturn(anotherClassValue); 
     target.myfunction(); 
     Mockito.verify(anotherClassValue).somethod(); 
    } 

    public static class MyClass { 

     public void myfunction(){ 
      AnotherClass c = createInstance(); 
      c.somethod();//This method sets some values of the AnotherClass object c; 
     } 

     protected AnotherClass createInstance() { 
      return new AnotherClass(); 
     } 
    } 

    public static class AnotherClass { 

     public void somethod() { 

     } 

    } 
} 

你會看到註釋掉c.somethod()使測試失敗。 我正在使用Mockito。