Я ищу кое-какие разъяснения относительно Arrange/Act/Assert, которые я реализую в своем процессе разработки как Given-When-Then. Я пытаюсь придерживаться концепции, но я обнаружил, что во время определенных событий (в частности, для ввода пользователем) мне нужно пересмотреть действие «Действие» как действие «Упорядочить», чтобы оно было правильно захвачено в модульном тесте , Я использую Moq как мой издевательский каркас здесь.Дано-когда-Тогда при работе с пользовательским вводом
Например: В моем проекте фокальной точкой кода является изображение, предоставленное пользователем. Существует функция, в которой пользователь может выбрать изображение, но если изображение уже присутствует, оно будет запрашивать пользователя, если оно хочет заменить активное изображение, или отменить действие и сохранить активное изображение. Я чувствую, что правильный способ написания этого конкретного сценария будет:
Учитывая рабочее пространство с изображением уже присутствует
Когда пользователь запрашивает новый образ
И пользователь выбирает заменить активный образ
Затем программа должна заменить изображение
Testwise, это выглядит что-нибудь г, как это:
mockModel.SetupProperty(m => m.Image, new Bitmap(100, 100)); // Given
mockView.Raise(v => v.UserRequestsNewImage += null); // When
mockMBox.Setup(mb => mb.ViewResult).Returns(ViewResult.OK); // And
mockView.Verify(v => v.OpenAddImageFileDialog(), Times.Once); // Then
Codewise, в моей презентации, это выглядит примерно так:
private void view_UserRequestsNewImage()
{
if (model.Image != null)
{
mbox.ShowDialog();
if (mbox.ViewResult == ViewResult.Cancel)
return;
}
view.OpenAddImageFileDialog();
}
Но это не удается, потому что сообщение бокса в Setup
происходит после того, как называется View-х Raise
. Таким образом, мне нужно переместить Setup
до того, как (и с помощью Setup
делает его чувствовать, как настроить «Упорядочить» в любом случае):
Учитывая рабочее пространство с изображением уже присутствует
И пользователь выбирает заменить активный образ
Когда пользователь запрашивает новый образ
Тогда программа должна заменить изображение
Но теперь мой сценарий выглядит не по порядку и что он не течет правильно. Я чувствую, что выбор пользователя для замены изображения (Setup
), так как это происходит после выбор пользователя для добавления нового изображения (Raise
) должен быть частью шага «Акт», но для того, чтобы он правильно высмеивал , Мне нужно поставить его на шаг Arrange.
Я использую здесь насмешливую структуру? Есть лучший способ сделать это? Или я нерешительно беспокоюсь о том, где шаг ввода пользователя должен быть расположен в настройке «Дано-когда-Тогда»?
Заранее спасибо.
С помощью некоторых пользовательских методов расширения вы можете соединять свои «Когда-И», поэтому вы пишете их, когда они поступают логически, но вместо прямого вызова Moq поместите лямбда в стек и выполните их в обратном порядке после завершения выражения. –