2009-04-22 99 views
1

我試圖測試一種方法。 我想ensrur有在法(呼叫服務)方法調用 代碼看起來是這樣的:旁路配置測試

using(proxy = new Proxy()) 
{ 
     proxy.CallService(); 
} 

我換用假對象中的代理(使用TypeMock) 卻得到因錯誤僞造的對象放置在塊的末尾。 我不想刪除該「使用」塊。 謝謝

回答

0

聲明:我在Typemock
工作,如果你使用的是排列法斷言API,你可以使用Members.ReturnRecursiveFakes 當你創建你的假對象(注意:這是版本5.2.0的默認值) 這也會自動僞造Dispose方法。

所以你的測試將是這樣的:

var fake = Isolate.Fake.Instance<Proxy>(Members.ReturnRecursiveFakes); 
Isolate.WhenCalled(() => fake.CallService()).IgnoreCall(); 
Isolate.Swap.NextInstance<Proxy>().With(fake); 

UnderTest classUnderTest = new ClassUnderTest(); 
classUnderTest.MethodUnderTest(); // assuming the Proxy instance is used here. 

Isolate.Verify.WasCalledWithAnyArguments(()=>fake.CallService()); 

我想補充一下喬恩斯基特說,我想創建一個單獨的測試,這將確保調用Dispose方法。
我認爲在每種測試方法中斷言一件事情是一種很好的做法,這樣當測試分手時,您會立即知道原因。

1

使模擬對象期望被處置。 (我不知道TypeMock,但在其他一些模擬框架中,這只是在「記錄」階段自己調用Dispose的一種情況。)事實上,我會說,如果沒有測試是錯誤的,因爲可以推測你想確保代理被丟棄。

0

只是指示您的代理模擬器以期望調用Dispose()以及。如果您在使用反射嘲笑你需要做這樣的

var proxyMock = MockManager.Mock(typeof(Proxy)); 
// set up regular calls to proxy, e.g. 
proxyMock.ExpectCall("CallService"); 
proxyMock.ExpectCall("Dispose"); 

東西自然嘲笑發出呼叫Dispose()在使用塊。

0

使假冒對象實現IDisposable:

class FakeObject : IDisposable 
{ 
    public void Dispose() {} 
} 
+0

OP正在使用TypeMock,所以沒有明確的假代理類。 – 2009-04-22 07:45:33