为什么我无法更改尚未设置的模拟对象属性的值?

问题描述 投票:0回答:1

我是单元测试新手,正在为 .NET C# 应用程序编写单元测试。为了创建模拟,我在测试项目中使用 MOQ NuGet 包。我有一个具有两个属性的接口:

public interface IUserInput
{
    public int FirstInput { get; set; }
    public int SecondInput { get; set; }
}

我有一个使用此接口的类:

public class CalculatorCore : ICalculatorBase
{
    private readonly IUserInput _input;

    public CalculatorCore(IUserInput input)
    {
        _input = input;
    }

    public int AddByUserInput()
    {
        _input.SecondInput += 2;
        return _input.FirstInput + _input.SecondInput;
    }
}

对于这个类,我编写了一个测试类和一个测试方法:

[TestClass]
public class CalculatorCoreTest
{
    [TestMethod]
    public void AddByUserInput()
    {
        Mock<IUserInput> userInputMock = new Mock<IUserInput>();
        userInputMock.SetupProperty(f => f.FirstInput, 1);
        userInputMock.SetupProperty(f => f.SecondInput, 1);

        var calculatorCore = new CalculatorCore(userInputMock.Object);

        var actual = calculatorCore.AddByUserInput();
        Assert.AreEqual(actual, 4);
    }
}

这个测试通过了,我没有任何问题。
然而,当我删除线

  userInputMock.SetupProperty(f => f.SecondInput, 1);

并将代码的断言部分更改为

Assert.AreEqual(actual, 3);

测试失败,我的结果是1。发生这种情况是因为当我将 2 添加到模拟对象属性时,它仍然等于 0;

为什么我无法更改尚未设置的模拟对象属性的值?

c# .net mocking console moq
1个回答
0
投票

如果没有设置,则无法设置该属性。为了使其直观,它的行为类似于以下属性:

int SecondInput { set {} get => default; }

所以它总是会返回

0

© www.soinside.com 2019 - 2024. All rights reserved.