如何最小化只读 属性 哪个值取决于 class 方法调用?
How to Moq a read only property which value depends on the the class method invoke?
我有一个界面,像这样
public interface IContent
{bool IsCheckedOut {get; };
void CheckOut();
}
CheckOut() 方法影响 属性 IsCheckedOut returns 的值。例如,在调用 CheckOut() 方法之前,IsCheckedOut returns false。之后,IsCheckedOut 属性 returnse 为真。
我想像这样测试 CheckOut 方法
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
var content = new Mock <IContent>();
// test mock CheckOut() method, something like this
content.Setup(x => x.CheckOut());
content.Object.CheckOut();
// Verify
Assert.AreEqual(true, content.IsCheckedOut); //Test works as expected
}
有人知道我该怎么做吗?
非常感谢。
试试这个:
var isCheckedOut = false;
content.Setup(x => x.CheckOut()).Callback(() => { isCheckedOut = true; });
content.SetupGet(x => x.IsCheckedOut).Returns(() => isCheckedOut);
content.Object.CheckOut();
mock 可能不是最好的方法,编写一个实现接口的存根对象来为您提供所需的行为可能更容易:
public class CheckoutStub : IContent
{
public bool IsCheckedOut { get; private set; }
public void CheckOut() { IsCheckedOut = true; }
}
mock 用于验证被测系统的行为,也许您只需要它作为输入。
但是,您可以使用 Moq 创建存根,通常只是工作量更大:
var isCheckedOut = false;
content.Setup(x => x.CheckOut()).Callback(() => { isCheckedOut = true; });
content.SetupProperty(x => x.IsCheckedOut);
我有一个界面,像这样
public interface IContent
{bool IsCheckedOut {get; };
void CheckOut();
}
CheckOut() 方法影响 属性 IsCheckedOut returns 的值。例如,在调用 CheckOut() 方法之前,IsCheckedOut returns false。之后,IsCheckedOut 属性 returnse 为真。 我想像这样测试 CheckOut 方法
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
var content = new Mock <IContent>();
// test mock CheckOut() method, something like this
content.Setup(x => x.CheckOut());
content.Object.CheckOut();
// Verify
Assert.AreEqual(true, content.IsCheckedOut); //Test works as expected
}
有人知道我该怎么做吗?
非常感谢。
试试这个:
var isCheckedOut = false;
content.Setup(x => x.CheckOut()).Callback(() => { isCheckedOut = true; });
content.SetupGet(x => x.IsCheckedOut).Returns(() => isCheckedOut);
content.Object.CheckOut();
mock 可能不是最好的方法,编写一个实现接口的存根对象来为您提供所需的行为可能更容易:
public class CheckoutStub : IContent
{
public bool IsCheckedOut { get; private set; }
public void CheckOut() { IsCheckedOut = true; }
}
mock 用于验证被测系统的行为,也许您只需要它作为输入。
但是,您可以使用 Moq 创建存根,通常只是工作量更大:
var isCheckedOut = false;
content.Setup(x => x.CheckOut()).Callback(() => { isCheckedOut = true; });
content.SetupProperty(x => x.IsCheckedOut);