@aershov, , Multiply 4 . , Factorial_Of4_ShouldReturn24. , TestCase, , :
[TestCase(4, 24)]
[TestCase(2, 2)]
[TestCase(1, 1)]
[TestCase(0, 1)]
public void Factorial_OfInput_ShouldReturnExpected(int input, int expectedResult)
{
Assert.That(mathObj.Factorial(input), Is.EqualTo(expectedResult));
}
@aershov , , . , , - Multiply virtual. . :
public class CMath : IMath
{
public virtual double Multiply(double a, double b)
{
return a * b;
}
Test
Mock<CMath> mockedObj;
CMath mathObj;
[SetUp]
public void Setup()
{
mockedObj = new Mock<CMath>();
mockedObj.CallBase = true;
mathObj = mockedObj.Object;
}
[Test]
public void Factorial_Of4_CallsMultiply4Times()
{
mathObj.Factorial(4);
mockedObj.Verify(x => x.Multiply(It.IsAny<double>(),
It.IsAny<double>()), Times.Exactly(4));
}
( , - ), , .
Mocks , , , , . , :
public double Factorial(int a)
{
double factorial = 1.0;
for (int i = 1; i <= a; i++)
factorial = Multiply(factorial, a);
return factorial;
}
, , . , , . , .
, , Factorial. 4!. : 4*3*2*1, 1 NOP, n*1=n. , :
public double Factorial(int a)
{
double factorial = 1.0;
for (int i = 2; i <= a; i++)
factorial = Multiply(factorial, i);
return factorial;
}
/ , Mocked, Multiply, , 3 .
.