如何最小化一个只读属性,其值取决于类方法调用?

MBK*_*MBK 2 c# methods interface moq

我有一个界面,像这样

public interface IContent 
{bool IsCheckedOut {get; };    
 void CheckOut(); 
}
Run Code Online (Sandbox Code Playgroud)

CheckOut() 方法影响属性 IsCheckedOut 返回的值。例如,IsCheckedOut 返回 false,直到调用 CheckOut() 方法。之后,IsCheckedOut 属性返回 true。我想测试像这样的 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
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我该如何做到这一点?

多谢。

Rob*_*Rob 5

尝试这个:

var isCheckedOut = false;
content.Setup(x => x.CheckOut()).Callback(() => { isCheckedOut = true; });
content.SetupGet(x => x.IsCheckedOut).Returns(() => isCheckedOut);
content.Object.CheckOut();
Run Code Online (Sandbox Code Playgroud)


cod*_*zen 5

模拟可能不是最好的方法,编写一个实现接口的存根对象来为您提供所需的行为可能更容易:

public class CheckoutStub : IContent
{
    public bool IsCheckedOut { get; private set; }
    public void CheckOut() { IsCheckedOut = true; }
}
Run Code Online (Sandbox Code Playgroud)

模拟用于验证被测系统的行为,也许您只需要它作为输入。

但是,您可以使用 Moq 创建存根,这通常只是更多工作:

var isCheckedOut = false;
content.Setup(x => x.CheckOut()).Callback(() => { isCheckedOut = true; });
content.SetupProperty(x => x.IsCheckedOut);
Run Code Online (Sandbox Code Playgroud)