繁体   English   中英

使用 Moq 模拟向导

[英]Mock a Guid with Moq

我正在使用 Moq 进行单元测试。 我想模拟一个Guid 我找到了这篇关于Guid.NewGuid()帖子,但我不知道它是否适合我,因为我不知道(也找不到) mockGuidService是什么类型。

mockGuidService的类型是Mock<IGuidService> 只有当您使用 GUID 提供服务的接口并且您能够注入模拟时,它才会起作用。

如果您的架构耦合太紧而无法做到这一点(没有接口,没有 DI),那么我建议对其进行改进,但如果您无法更改它,那么还有另一种选择。 您可以提取生成 GUID 作为方法,将其标记为虚拟并创建整个对象的模拟,您可以在其中更改方法的行为。

您可以像这样实现带有接口的包装类。

public interface IGuidService { Guid NewGuid(); }

class GuidService : IGuidService
{
    public Guid NewGuid() { return Guid.NewGuid(); }
}

您必须添加依赖项注入才能将其添加到您的类中。 在您正在测试的类中,添加包装器的一个实例并在构造函数中分配它。

class MyClass {
    private IGuidService myGuidService;

    public MyClass() { myGuidService = new GuidService(); }
    public MyClass(IGuidService gw) { myGuidService = gw; }

    public void DoSomethingThatRequiresAGuid() {
        myGuidService.NewGuid();
    }
}

然后在您的测试中,您将执行以下操作:

var mockGuidService = new Mock<IGuidService>();
mockGuidService.Setup(x => x.NewGuid()).Returns( [a Guid of your choice] );
new MyClass(mockGuidService.Object);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM