Напишите тестовый пример NUnit для метода, который запрашивает окно сообщения
У меня есть метод со следующей структурой:
bool myMethod(some arguments)
{
//Show User Dialog
}
Отображается диалоговое окно с 4 кнопками "Да", "Да для всех", "Нет", "Нет для всех".
Когда я запускаю тестовый пример, он показывает диалоговое окно пользователя, но тестовый пример не продолжается, пока пользователь не нажмет любую кнопку. Как мы покрываем такие методы, используя nUnit Test case?
3 ответа
Вы должны ввести что-то, что заглушит 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);
}
Это зависит от того, что вы хотите проверить. Если вы просто обеспокоены ходом приложения после ответа пользователя (они нажимают YES, NO и т. Д.), Тогда вы можете просто заглушить "фальшивый" ответ:
public void MessageBox_UserPressesOK()
{
var result == Dialog.OK
// test
}
И так далее.
Вы можете использовать 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"));
}