저는 Arrange/Act/Assert에 대한 설명을 찾고 있는데, 이것은 개발 과정에서 Given-When-Then으로 구현하고 있습니다. 나는이 개념을 고수하려고 노력하지만 특정 사건 (특히 사용자 입력) 중에는 "행위"행동을 단위 테스트에서 제대로 파악하기 위해 "배열"행동으로 재고해야한다는 것을 알았습니다. . 여기 내 조롱 프레임 워크로 Moq을 사용하고 있습니다.감안할 때 사용자 입력을 처리 할 때
예 : 내 프로젝트에서 코드의 초점은 사용자가 제공 한 이미지입니다. 사용자가 이미지를 선택할 수있는 기능이 있지만 이미 이미지가있는 경우 활성 이미지를 바꾸려면 사용자에게 쿼리하거나 작업을 취소하고 활성 이미지를 유지합니다. 나는이 특정 시나리오를 작성하는 적절한 방법이 될 것이라고 느낄 : 사용자가 새 이미지를 요청하면 이미 존재하는 이미지와 작업 공간이
이
그리고는 사용자가 선택
이을 감안할 때 프로그램이 이미지
테스트 방식을 교체해야
그런 다음 활성 이미지를 교체, 그것은 뭔가를 보이는 이 같은 g :
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();
}
을 그러나보기의 Raise
가 호출 된 후 메시지 상자의 Setup
가 발생하기 때문에이 실패합니다. 이미 존재하는 이미지와 작업 공간이
그리고 사용자가 선택
을 감안할 때 : 따라서, 나는 (그리고 Setup
그것은 어쨌든 "정렬"설정 같은 느낌을 사용)하기 전에 Setup
를 이동해야 사용자가 새로운 이미지를
다음 프로그램이 이미지를 교체해야을 요청하면 활성 이미지
을 대체
하지만 지금은 내 시나리오가 제대로 작동하지 않아 제대로 작동하지 않습니다. 나는 이후에 새로운 이미지 (Raise
)를 추가 할 사용자가 선택한 후 이미지가 (Setup
) 대체되므로 사용자가이 이미지를 대체해야한다고 생각하지만이 이미지를 제대로 모의하기 위해서는 , 나는 그것을 준비 단계에 넣어야한다.
여기 조롱 틀을 잘못 사용하고 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 Given-When-Then 설정에서 사용자 입력 단계가 어디에 위치해야하는지 비현실적으로 생각하고 있습니까?
미리 감사드립니다. "사용자가 새 이미지를 요청하면"
사용자 정의 확장 메서드를 사용하면 When-And를 체인으로 연결할 수 있으므로 논리적으로 흐름을 따라 작성하지만 직접 Moq를 호출하는 대신 람다를 스택에 넣고 종료 식 뒤에 역순으로 실행합니다. –