测试是否在单元测试中成功显示了消息框

时间:2016-12-30 08:51:46

标签: c# unit-testing messagebox

希望这很简单,但我一直试图解决这个问题。

如果我有一个带有一个应该做某事的方法的简单类,然后当某些值处于某种状态时通过MessageBox.Show(“”)显示一个消息框,我该如何编写一个可以测试的测试/测试检测消息框是否在预期时显示和/或在不期望时显示?

2 个答案:

答案 0 :(得分:3)

你不能通过单元测试来测试它。有一种简单的方法可以测试代码是否被正确调用。

我会隐藏在界面后面显示MessageBox。然后在模拟实现中模拟该接口并创建一个类似的计数器。当然,你可以根据需要制作这个,提供所显示的信息等等。

答案 1 :(得分:0)

您不应该测试MesssageBox是否出现,尽管可以使用一个或另一个UI自动化框架(如https://msdn.microsoft.com/en-us/library/ms747327(v=vs.110).aspx)进行测试。

但它不会成为单位测试。这将是automated UI test

所以,如果你想创建一个合适的单元测试,那么你的课应该是injectable一些

public interface IMessageBox
{
    void Show(String message);
}

public class SUT
{
    public SUT(IMessageBox messageBox)
    {   
        this._messageBox = messageBox;
    }

    public void Test()
    {
        this._messageBox.Show("TEST);
    }
}

这样你就可以在单元测试中mock IMessageBox。

例如,使用Moq

[TestMethod]
public void Test()
{
    // Arrange
    var messageBox = new Mock<IMessageBox>();
    messageBox
        .Setup(m =>
            m.Show("TEST))
        .Verifiable();

    var sut = new SUT(messageBox.Object);

    // Act
    sut.Test();

    // Verify
    messageBox.Verify();        
}