2009-04-22 61 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