gpt4 book ai didi

c# - 模拟像计算器这样的类的目的是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:52:57 25 4
gpt4 key购买 nike

我已经使用 TDD 一段时间了,但现在我正在研究模拟框架,但我没有得到一些东西。对于有经验的人来说,这个问题可能听起来很愚蠢,但我就是不明白。我使用的库是 Moq + xUnit。

问题

如果我明确地说 2 + 2 将在这一行 mock 上返回 4,那么测试 Calculator 类有什么意义。 Setup(x => x.Add(2, 2)).Returns(4); 然后断言?

当然结果将是 4,我只是在测试本身上方的几行中“强制”它返回 4。现在,即使在我的实现中,如果我执行 return a * b; 而不是 return a + b;,测试也会通过。

这是同一计算器测试的另一个示例。 http://nsubstitute.github.io/

示例代码

namespace UnitTestProject1
{
using Xunit;
using Moq;

public class CalculatorTests
{
private readonly ICalculator _calculator;

public CalculatorTests()
{
var mock = new Mock<ICalculator>();

mock.Setup(x => x.Add(2, 2)).Returns(4);
mock.Setup(x => x.Subtract(5, 2)).Returns(3);

this._calculator = mock.Object;
}

[Fact]
public void Calculator_Should_Add()
{
var result = _calculator.Add(2, 2);

Assert.Equal(4, result);
}

[Fact]
public void Calculator_Should_Subtract()
{
var result = _calculator.Subtract(5, 2);

Assert.Equal(3, result);
}
}

public class Calculator : ICalculator
{
public int Add(int a, int b)
{
return a + b;
}

public int Subtract(int a, int b)
{
return a - b;
}
}

public interface ICalculator
{
int Add(int a, int b);
int Subtract(int a, int b);
}
}

最佳答案

目的是能够根据计算器测试类,而无需计算器本身。在您的测试中,您知道计算器不会是失败的原因,因为正在返回正确答案。

通过隔离被测代码,您将能够测试真正的代码单元。并查看究竟是什么导致了您的测试失败。

关于c# - 模拟像计算器这样的类的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23518128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com