我已经使用TDD有一段时间了,但是现在我正在看一些mocking框架,其中有些问题我并不明白。对于有经验的人来说,这个问题可能听起来很愚蠢,但我就是不明白。我使用的库是Moq + xUnit。
问题
如果我明确地声明2+2
将返回4
,然后再做断言,测试Calculator
类的意义是什么?
当然结果将是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);
}
}
Add()
测试计算Add(2,3)
而不是(2,2)的必要性。 - Lynn Crumbling