[英]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.