验证是否已使用Moq设置属性

时间:2016-03-28 21:25:16

标签: c# properties textbox moq

我正在尝试学习如何使用Moq并且无法使其工作:我有一个带有TextBox的接口和一个使用该接口的Presenter类。我希望能够检查该类中的某些方法是否已将TextBox的text属性设置为特定值。这就是我尝试过的:

public interface IView
{ TextBox MyTextBox { get; } }

public class Presenter
{
private IView _view;

public Presenter(IView view)
{ _view = view; }

public void Foo(string txt)
{
// try to set the Text in MyTextBox:
// this gives a NullReferenceException => _view.MyTextBox.Text = txt;           
}
}

在我的测试中,我想做这样的事情:

[Test]
public void Test_For_TestBoxText_Set()
{
var mockView = new Mock<IView>();
var presenter = new Presenter(mockView.Object);
presenter.Foo("bar");
mockView.VerifySet(v => v.MyTextBox.Text = "bar");
}

` 任何人都可以指出我正确的方向,并解释为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

您可以创建一个真实的TextBox并让模拟返回它。然后在断言阶段,您可以针对该真实TextBox进行测试。这是一个例子:

//Arrange
Mock<IView> moq = new Mock<IView>();

var textbox = new TextBox();

moq.Setup(x => x.MyTextBox).Returns(textbox);

Presenter presenter = new Presenter(moq.Object);

//Act
presenter.Foo("test");

//Assert
Assert.AreEqual("test", textbox.Text);