我正在尝试学习如何使用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");
}
` 任何人都可以指出我正确的方向,并解释为什么这不起作用?
答案 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);