如何使用Get()和Set()方法对类进行moq

时间:2016-03-25 14:57:06

标签: c# unit-testing mocking moq stub

我似乎没有moq我的类有getter和setter方法(不是属性)。我需要将变量保存到某处以便稍后返回。

我的班级签名:

public interface IMyClass
{
    int Get();
    void Set(int i);
}

我真正的实施:

  • Set()=>加密int并将其保存在本地变量中
  • Get()=>从局部变量解密int并返回int

我希望moq表现如何:

public class MyClassFake : IMyClass
{
    private int _local;
    public int Get()
    {
        return _local;
    }

    public void Set(int i)
    {
        _local = i;
    }
}

到目前为止,我尝试过的工作并没有做到:

        var mockMyClass = new Mock<IMyClass>();
        var number = new int();
        mockMyClass.Setup(x => x.Set(It.IsAny<int>())).Callback<int>(x=> number = x);
        mockMyClass.Setup(x => x.Get()).Returns(number);

1 个答案:

答案 0 :(得分:1)

您必须更改Get()设置以使用接收Func<>作为参数的重载:

var mockMyClass = new Mock<IMyClass>();
var number = 0;
mockMyClass.Setup(x => x.Set(It.IsAny<int>())).Callback<int>(x => number = x);
mockMyClass.Setup(x => x.Get()).Returns(() => number);

在您当前的代码中,您将Get()结果定义为固定数字(初始值number