我有一个条件语句,应如下所示:
//...
if(_view.VerifyData != true)
{
//...
}
else
{
_view.PermanentCancellation.Cancel();
}
其中 PermanentCancellation 的类型为 CancellationTokenSource。
我想知道我应该如何在我的 _view 模拟中设置它。到目前为止,所有尝试都失败了:(而且我在谷歌上找不到例子。
任何指示将不胜感激。
Because CancellationTokenSource.取消 http://msdn.microsoft.com/en-us/library/dd321955.aspx不是虚拟的,你不能用最小起订量模拟它。
您有两个选择:
创建一个包装接口:
public interface ICancellationTokenSource
{
void Cancel();
}
以及委托给包装的 CancellationTokenSource 的实现
public class CancellationTokenSourceWrapper : ICancellationTokenSource
{
private readonly CancellationTokenSource source;
public CancellationTokenSourceWrapper(CancellationTokenSource source)
{
this.source = source;
}
public void Cancel()
{
source.Cancel();
}
}
并使用ICancellationTokenSource
as PermanentCancellation
那么你可以创建一个Mock<ICancellationTokenSource>
在你的测试中:
// arrange
var mockCancellationTokenSource = new Mock<ICancellationTokenSource>();
viewMock.SetupGet(m => m.PermanentCancellation)
.Returns(mockCancellationTokenSource.Object)
// act
// do something
// assert
mockCancellationTokenSource.Verify(m => m.Cancel());
并使用CancellationTokenSourceWrapper
在您的生产代码中。
或者使用支持模拟非虚拟成员的模拟框架,例如:
- 微软假货 http://msdn.microsoft.com/en-us/library/hh549175.aspx
-
类型模拟隔离器 http://www.typemock.com/isolator-product-page(商业的)
-
JustMock http://www.telerik.com/products/mocking.aspx(商业的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)