Controller.ViewData.ModelState
은 어떻게 테스트 할 수 있습니까? 나는 모의 틀없이이 작업을하는 것을 선호한다.ModelState를 테스트하려면 어떻게해야합니까?
답변
데이터에 저장소 패턴을 사용하는 경우 Mock을 사용할 필요가 없습니다.
몇 가지 예 : http://www.singingeels.com/Articles/Test_Driven_Development_with_ASPNET_MVC.aspx
// Test for required "FirstName".
controller.ViewData.ModelState.Clear();
newCustomer = new Customer
{
FirstName = "",
LastName = "Smith",
Zip = "34275",
};
controller.Create(newCustomer);
// Make sure that our validation found the error!
Assert.IsTrue(controller.ViewData.ModelState.Count == 1,
"FirstName must be required.");
오류에 대한 가상 수정자가 좋을 것입니다. 아쉽게도 조세가 나에게 너무 무거운 것처럼 보입니다. –
IMHO 더 나은 솔루션은 mvc 컨베이어를 사용하는 것입니다. 이 방법으로 컨트롤러의보다 현실적인 동작을 얻을 수 있습니다. 모델 유효성 검사를 속성 검증으로 전달해야합니다. 게시물 아래에이 설명되어 있습니다 (http://stackoverflow.com/a/5580363/572612). –
//[Required]
//public string Name { get; set; }
//[Required]
//public string Description { get; set; }
ProductModelEdit model = new ProductModelEdit() ;
//Init ModelState
var modelBinder = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(
() => model, model.GetType()),
ValueProvider=new NameValueCollectionValueProvider(
new NameValueCollection(), CultureInfo.InvariantCulture)
};
var binder=new DefaultModelBinder().BindModel(
new ControllerContext(),modelBinder);
ProductController.ModelState.Clear();
ProductController.ModelState.Merge(modelBinder.ModelState);
ViewResult result = (ViewResult)ProductController.CreateProduct(null,model);
Assert.IsTrue(result.ViewData.ModelState["Name"].Errors.Count > 0);
Assert.True(result.ViewData.ModelState["Description"].Errors.Count > 0);
Assert.True(!result.ViewData.ModelState.IsValid);
나는이 방법이 정말 마음에 든다. 여러분이 말한 것처럼 유효성 검사 속성으로 장식 된 모델을 적절하게 테스트하는 것이 훨씬 낫습니다. – stevethethread
이것은 대단합니다! – Ian1971
매우 편리합니다. 저는 여러분이 모델 속성을 테스팅해서는 안되며, 프레임 워크의 일부이기 때문에 여러분이 일반적으로 동의한다고 생각합니다. 그러나 컨트롤러가 중요한 오류를 잡는 모든 미래의 시간을 확인하는 것이 중요 할 때가 있습니다. –
위의 큰 응답에 추가하면, Controller 클래스 내에서 보호 TryValidateModel 방법이 환상적인 사용을 확인하십시오.
컨트롤러에서 상속 한 테스트 클래스를 만들고 TryValidateModel 메서드에 모델을 전달하기 만하면됩니다. 여기에 링크가 있습니다 : http://blog.icanmakethiswork.io/2013/03/unit-testing-modelstate.html
이 솔루션을 사용하려면 John Reilly와 Marc Talary에게 충분한 크레딧을드립니다. 테스트 웹 API에 대한
여기가 아니라 블로그 포스트에 전원 연결보다 솔루션을주십시오 – csharpsql
귀하의 링크는 확장 메서드 '공공 정적 무효 BindModelToController
는 컨트롤러의 Validate 방법을 사용하십시오
var controller = new MyController();
controller.Configuration = new HttpConfiguration();
var model = new MyModel();
controller.Validate(model);
var result = controller.MyMethod(model);
- 1. NSString을 nil로 테스트하려면 어떻게해야합니까?
- 2. Zend_Form 클래스를 테스트하려면 어떻게해야합니까?
- 3. Android에서 라이브러리를 테스트하려면 어떻게해야합니까?
- 4. Java UI를 테스트하려면 어떻게해야합니까?
- 5. DNS 연결을 테스트하려면 어떻게해야합니까?
- 6. 콘솔에서 CanCan을 테스트하려면 어떻게해야합니까?
- 7. DataGridViewCell의 유형을 테스트하려면 어떻게해야합니까?
- 8. 플래시 응용 프로그램을 테스트하려면 어떻게해야합니까?
- 9. 루비 Mixin 모듈을 테스트하려면 어떻게해야합니까?
- 10. DB 속도를 테스트하려면 어떻게해야합니까? (학습)
- 11. 장고에서 데이터베이스 연결을 테스트하려면 어떻게해야합니까?
- 12. 콘솔에서 레일스 로그인을 테스트하려면 어떻게해야합니까?
- 13. TCP 프로토콜 앱을 테스트하려면 어떻게해야합니까?
- 14. NUnit으로 private 메서드를 테스트하려면 어떻게해야합니까?
- 15. iPhone에서 Xcode Project를 테스트하려면 어떻게해야합니까?
- 16. ModelState와 작동하는 ActionFilterAttributes를 테스트하려면 어떻게해야합니까?
- 17. Windows API를 효과적으로 테스트하려면 어떻게해야합니까?
- 18. Appengine에서 ReferenceProperty의 유효성을 테스트하려면 어떻게해야합니까?
- 19. Java로 인터넷의 가용성을 테스트하려면 어떻게해야합니까?
- 20. Rails 플러그인에서 뷰를 테스트하려면 어떻게해야합니까?
- 21. nunit에서 일반 콜렉션을 테스트하려면 어떻게해야합니까?
- 22. 플래시 응용 프로그램을 테스트하려면 어떻게해야합니까?
- 23. 데이터베이스 트랜잭션 논리를 테스트하려면 어떻게해야합니까?
- 24. ModelState를 사용하여 폼 유효성 검사
- 25. ModelState를 ASP.Net MVC의 ActionResult로 설정
- 26. ViewData \ ModelState를 하위 작업으로 내보내기
- 27. Selenium으로 동적 이미지 컨텐츠를 테스트하려면 어떻게해야합니까?
- 28. 실제 장치에서 iPhone 앱을 테스트하려면 어떻게해야합니까?
- 29. 키없이 장치에서 iPhone 응용 프로그램을 테스트하려면 어떻게해야합니까?
- 30. 클래스에 특정 속성이 포함되어 있는지 테스트하려면 어떻게해야합니까?
더 구체적으로. 무엇을 시험해보고 싶습니까? – skb