c# - 什么时候应该使用 Moq 的 .As 方法?

标签 c# unit-testing moq

具体什么时候我们需要使用Moq提供的.As方法?

来自快速入门文档:

// implementing multiple interfaces in mock
var foo = new Mock<IFoo>();
var disposableFoo = foo.As<IDisposable>();
// now the IFoo mock also implements IDisposable :)
disposableFoo.Setup(df => df.Dispose());

但我只是不明白为什么我们要这样做。你能给我一个实际的例子吗?

最佳答案

当您需要测试实现多个接口(interface)的对象时,您可以使用As方法。
this示例,如果输入对象也实现 IDisposable,则测试代码具有特定行为。像这样:

public void Execute(IFoo input)
{
    // do process...

    IDisposable disposable = input as IDisposable;
    if (disposable != null)
    {
        disposable.Dispose();
    }
}

类实现:

public class ConcreteFoo: IFoo, IDisposable
{
    ...
}

编辑:

所需的最小起订量配置:

var foo = new Mock<IFoo>(); 
var disposableFoo = foo.As<IDisposable>(); 
disposableFoo.Setup(df => df.Dispose());

// Verify whether the Dispose() method was called
// That's true only if we use the As method from Moq.
testedClass.Execute(disposableFoo);
disposableFoo.Verify(m => m.Dispose());

关于c# - 什么时候应该使用 Moq 的 .As 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30835395/

相关文章:

c# - 使用 MSTest 和 Moq 测试存储库 - .Verify 不工作

c# - 像 Intersect() 这样带有部分比较的枚举方法

c# - 是否可以为所有测试设置 [OneTimeSetup]?

asp.net-mvc - 如何正确使用Moq框架——基本问题

java - 有没有办法在不使用 Thread.sleep 的情况下对 ScheduledExecutorService.scheduleAtFixedRate 进行单元测试?

c# - XUnit、AutoFixture 和 Moq 最佳实践

c# - 类型定义应以 '{' 开头,期望序列化类型 'ErrorResponse' ,得到以 : MOCK FOR URL NOT FOUND 开头的字符串

c# - Java - Java 有类似 C# 的结构自动构造函数的东西吗

c# - 如何提供模型以供查看?

JAVA - LocalDate.plusDay() 不能正常工作