如果從可與模擬測試時被替換服務呼叫MessageBox.Show()
,你的罰款。
畢竟,你不想要的是一個消息框運行您的視圖模型單元測試時彈出...
例子:
public interface IMessageBoxService
{
ClickedButten ShowMessageBox(string message, Buttons buttons);
}
internal class SomeViewModel
{
public SomeViewModel(IMessageBoxService messageBoxService)
{
_messageBoxService = messageBoxService;
}
public void SomeMethodThatNeedsAMessageBox()
{
var theClickedButton = _messageBoxService.ShowMessageBox("Click me!", Buttons.Ok | Buttons.Cancel);
// react to the click...
}
}
internal class SystemMessageBoxService : IMessageBoxService
{
public ClickedButten ShowMessageBox(string message, Buttons buttons)
{
// adapt parameters...
MessageBox.Show(...);
// adapt result...
}
}
internal class XceedMessageBoxService : IMessageBoxService
{
public ClickedButten ShowMessageBox(string message, Buttons buttons)
{
// adapt parameters...
Xceed.ShowMessageBox(...);
// adapt result...
}
}
現在只需綁定所需的服務使用(甚至可以在運行時決定),並在測試時注入模擬。