我正在尝试使用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;预期不匹配,但为什么我收到此错误?它在哪里是一个简单的逻辑。
答案 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);
}