c# - 如何使用 Get() 和 Set() 方法最小化一个类

标签 c# unit-testing mocking moq stub

我似乎无法最小化具有 getter 和 setter 方法(不是属性)的类。我需要将变量保存在某处以便稍后返回。

类(class)签名:

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

我的实际实现:

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

我希望最小起订量如何表现:

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

最佳答案

你必须改变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 )

关于c# - 如何使用 Get() 和 Set() 方法最小化一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36222338/

相关文章:

.net - 单元测试还是功能测试?

java - 模拟方法未返回预期结果

c# - Azure C# v2 函数 : Entire table processed instead of portion of table

c# - 可空类?

c# - 用最小起订量模拟 MediatR 3

linq-to-sql - Entity Framework 是否比 Linq2Sql 更可模拟?

python - 使用 __init__.py 模拟补丁

c# - 使用 API 从 Azure blob 下载

c# - 使用 sql 查询将值插入 sql 数据库

.net - 如何对与 VS DOM 交互的 Visual Studio 插件进行单元测试