为提示消息框的方法编写NUnit测试用例

时间:2012-05-09 10:33:16

标签: c# nunit-2.5

我有一个具有以下结构的方法:

bool myMethod(some arguments)
{

   //Show User Dialog

}

显示用户对话框,其中包含4个按钮,“是”,“全是”,“否”,“全是”。

当我运行测试用例时,它会显示用户对话框,但在用户单击任何按钮之前,测试用例不会继续。我们如何使用nUnit测试用例来涵盖这些方法?

3 个答案:

答案 0 :(得分:2)

你必须注入一些存根 Show User Dialog电话。然后,您可以在测试中将存根设置为所需的用户答案并调用您的方法:

public class MyClass
{
    private IMessageBox _MessageBox;

    public MyClass(IMessageBox messageBox)
    {
        _MessageBox = messageBox;
    }

    public bool MyMethod(string arg)
    {
        var result = _MessageBox.ShowDialog();
        return result == DialogResult.Ok;
    }
}

internal class MessageBoxStub : IMessageBox
{
    DialogResult Result {get;set;}

    public DialogResult ShowDialog()
    {
        return Result;
    }
}

[Test]
public void MyTest()
{
    var messageBox = new MessageBoxStub() { Result = DialogResult.Yes }
    var unitUnderTest = new MyClass(messageBox);

    Assert.That(unitUnderTest.MyMethod(null), Is.True);
}

答案 1 :(得分:1)

这取决于您要测试的内容。 如果你只关心用户响应之后应用程序的流程(他们按YES,NO等),那么你可能只是存在一个“假的”响应:

public void MessageBox_UserPressesOK()
{
var result == Dialog.OK
    // test
}

等等。

答案 2 :(得分:1)

您可以使用Typemock Isolator(请注意,这不是免费工具),这是您网页上的确切示例:

[Test]
public void SimpleTestUsingMessageBox()
{
 // Arrange
 Isolate.WhenCalled(()=>MessageBox.Show(String.Empty)).WillReturn(DialogResult.OK);

 // Act
 MessageBox.Show("This is a message");

 // Assert
 Isolate.Verify.WasCalledWithExactArguments(()=>MessageBox.Show("This is a message"));
}