尝试单元测试案例中的模拟

时间:2016-08-08 12:44:10

标签: c# unit-testing mocking moq

我正在尝试使用Simple Multiplication应用程序,

public virtual int Multi(int a, int b)
{
    return a * b;
}

我正在尝试使用Moq进行模拟。但是在

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            int a = 5;
            int b = 10;
            Mock<WebForm1> Titi = new Mock<WebForm1>();
            // WebForm1 obj = new WebForm1();
            //int  Real=  obj.Multi(a, b);
             // Titi.Setup(x => x.data()).Returns(true);
            Titi.CallBase = true;
        var data= Titi.Setup(x => x.Multi(a, b)).Returns(50);



            Assert.AreEqual(true, Titi.Object);
            //Assert.AreEqual(50, Titi.Object); 




        }
    }
}

在Mocking输出中我得到了

Assert.AreEqual failed. Expected:<True (System.Boolean)>. Actual:<Castle.Proxies.WebForm1Proxy (Castle.Proxies.WebForm1Proxy)>

这意味着实际&amp;预期不匹配,但为什么我收到此错误?它在哪里是一个简单的逻辑。

1 个答案:

答案 0 :(得分:1)

您没有正确使用模拟

[TestMethod]
public void TestMethod1() {
    int a = 5;
    int b = 10;
    int expected = 50;
    Mock<WebForm1> mockWebForm = new Mock<WebForm1>();
    mockWebForm.Setup(x => x.Multi(a, b)).Returns(expected);

    var webForm = mockWebForm.Object;

    var data = webForm.Multi(a, b);

    Assert.AreEqual(50, data);
}

通常情况下,模拟用于依赖。

例如说你有

public interface IMultiply {
    int Multiply(int a, int b);
}

并且您的网络表单取决于该界面

public class WebForm1 {
    IMultiply multiplier;
    public WebForm1(IMultiply multiplier) {
        this.multiplier = multiplier;
    }

    public virtual int Multi(int a, int b) {
        return multiplier.Multiply(a, b);
    }
}

然后单元测试看起来像这样

[TestMethod]
public void TestMethod1() {
    //Arrange
    int a = 5;
    int b = 10;
    int expected = 50;
    var mockMultiplier = new Mock<IMultiply>();
    mockMultiplier.Setup(x => x.Multiply(a, b)).Returns(expected);

    //your web form is the system under test
    var webForm = new WebForm1(mockMultiplier.Object);

    //Act
    var actual = webForm.Multi(a, b);

    Assert.AreEqual(expected, actual);
}