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