저는 Moq 프레임 워크를 시작하고 절대적으로 좋아합니다. 필자는 테스트를 위해 컨트롤러를 준비 할 수있는 몇 가지 서비스와 인터페이스가있는 컨트롤러 테스트를 작성하고 있습니다. 나는 그것을 조금 더 모듈화하고 싶다. 그리고 이것이 사소한 일이라고 생각했지만, 생각했던 것보다 조금 더 까다로운 것으로 판명되었다. 내가 할 수 있도록하고 싶습니다 무엇반복 설정으로 Moq 컨트롤러 테스트
[Test]
public void Get_SignIn_Should_Return_View()
{
#region //TODO: figure out how to extract this out to avoid duplicate code
// Arrange
var membershipService = new Mock<IMembershipService>();
var formsService = new Mock<IFormsAuthenticationService>();
var userService = new Mock<IUserService>();
var dictService = new Mock<IDictionaryService>();
var shoppingBasketService = new Mock<IShoppingBasketService>();
//Create the service provider mock and pass in the IRepositoryFactory so that it isn't instantiating real repositories
var repoFactory = new Mock<IRepositoryFactory>();
var serviceProvider = new Mock<ServiceProvider>((IRepositoryFactory)repoFactory.Object);
var context = new Mock<HttpContextBase> { DefaultValue = DefaultValue.Mock };
var sessionVars = new Mock<SessionVars>();
AccountController controller = new AccountController(serviceProvider.Object, sessionVars.Object)
{
FormsService = formsService.Object,
MembershipService = membershipService.Object,
UserService = userService.Object,
DictionaryService = dictService.Object,
ShoppingService = shoppingBasketService.Object
};
controller.ControllerContext = new ControllerContext()
{
Controller = controller,
RequestContext = new RequestContext(context.Object, new RouteData())
};
#endregion
// Act
ActionResult result = controller.SignIn();
// Assert
Assert.IsInstanceOf<ViewResult>(result);
}
가 #region
모든 것을 받아 도우미 메서드로 그를 추출하거나 수 있습니다 : 여기
여기에 누락 된 것이 있습니까? 아니면 각 단위 테스트에서이 코드 조각을 복사하여 붙여 넣기해야합니까?
그게 내가하는 일입니다. 기본 테스트 클래스의 모의 멤버를 만들고 그 테스트 메소드의 공통 설정 방법을 가지고 있습니다. –