我有一个带有自定义消息框的功能,
public bool SomeFunction()
{
MessageBoxResult mResult= MessageBox.Show("Displaying message");
bool result;
if(mResult == MessageBoxResult.OK)
{
result = AnyFunction();
}
return result;
}
我想为这种方法编写一个单元测试,而不显示消息框。有什么办法吗?我正在使用'Microsoft.VisualStudio.TestTools'
最佳答案
这可能是使用moq
的一种方法。这个想法是将真正的消息框实现隐藏在界面后面,然后根据您希望在测试中实现的功能模拟其行为。
实作
public interface IMessageBox
{
MessageBoxResult Show(string msg);
}
public class SomeClass
{
private readonly IMessageBox _messageBox;
public SomeClass(IMessageBox messageBox)
{
_messageBox = messageBox;
}
public bool SomeFunction()
{
MessageBoxResult mResult = _messageBox.Show("Displaying message");
bool result;
if(mResult == MessageBoxResult.OK)
{
result = AnyFunction();
}
return result;
}
}
单元测试:
Mock<IMessageBox> messageBoxMock = new Mock<IMessageBox>();
messageBoxMock.Setup(m => m.Show(It.IsAny<string>()))
.Returns(MessageBoxResult.OK); //can be whatever depends on test case
SomeClass sut = new SomeClass(messageBoxMock.Object);