从Moq创建新实例.对象单元测试失败



我正在尝试使用我已经设置的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
}
}

相关内容

  • 没有找到相关文章

最新更新