我正在尝试使用我已经设置的moq实例化一个新对象,但我没有得到我在moq中设置的数据。为什么?
例如:我在mock中设置了MyMethod()
到true
。但是当我从mock.object
创建新实例时,我得到MyMethod()
的false
。
接口:
public interface IMyClass
{
bool MyMethod();
}
类
public class MyClass : IMyClass
{
public MyClass(IMyClass myClass)
{
}
public bool MyMethod()
{
return false;
}
public string DoSomething()
{
if(MyMethod() == false)
{
// do something
return "did something";
}
else
{
// do something else
return "did something else";
}
}
}
TestMethod
[TestMethod]
public void MyMethodTest()
{
var moq = new Mock<IMyClass>();
moq.Setup(m => m.MyMethod()).Returns(true);
var sut = new MyClass(moq.Object);
Assert.AreEqual(sut.DoSomething(), "did something else"); // Actual: "did something" Expected: "did something else"
}
测试失败,因为您没有将类中的任何值赋给被比较的公共成员。
MyClass.MyProperty
从未被赋值,所以在
Assert.AreEqual(sut.MyMethod(), true);
sut.MyMethod()
将会是false
您需要重构类以使用来自注入接口的值,并将其分配给相应的成员。
public class MyClass : IMyClass {
public bool MyProperty { get; set; }
public bool MyMethod() {
return MyProperty;
}
public MyClass(IMyClass myClass) {
this.MyProperty = myClass.MyProperty; // assigning value to property
}
}