用Moq模拟一个Guid

时间:2016-08-05 19:22:34

标签: mocking moq guid

我使用Moq进行单元测试。我想嘲笑Guid。我找到了this post about mocking Guid.NewGuid(),但我不知道它是否适合我,因为我不知道(并且无法找到)mockGuidService类型。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以使用接口实现包装类,如下所示。

array = np.array([-0.5, -2, -1, -0.5, -0.25, 0, 0, -2, -1, 0.25, 0.5, 1, 2])

p = []

def function(array, p):
    for i in np.nditer(array):
       if i < -1: 
          while i <= -0.3:
            p.append(1)
            i += 1
          else:
            p.append(0)
            i += 1
    return p

a = function(array, p)
print(a)

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

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();
    }
}