IoC 및 DI와 결합 된 MVC를 배우려고하는 임. 내 프로젝트에서 나는 또한 Castle, Automapper, NHibernate, NHibernateIntegration을 사용한다.단위 테스팅 MVC 컨트롤러
Kozmic의 우수 사례 "ToBeSeen"덕분에 나는 솔루션을 지금 거의 갖추고 있다고 생각합니다. 하지만 이제 컨트롤러 메서드 수준에서 기본 저장 작업을 단위 테스트하고 싶습니다. 나는 이것에 대해 어떻게 생각하는지 모르겠다. 내 문제는 꽤 간단하지만 Im과 초보자가이 도움을 주시면 감사하겠습니다.
[Authorize]
[Transactional]
public class DossierController : BaseController
{
private readonly IRepository repository;
private readonly IMappingEngine mappingEngine;
private readonly ILogger logger;
public DossierController(IRepository repository, IMappingEngine mappingEngine, ILogger logger)
{
this.repository = repository;
this.mappingEngine = mappingEngine;
this.logger = logger;
}
당신이이 repostitory, mappingengine 및 로거를 필요 볼 수 있듯이 :
나는 이런 dossiercontroller 있습니다. 내가 알기 로이 모든 구성 및 런타임에 유선.
[HttpPost]
[ActionName("Dossier")]
[Transaction]
[AcceptVerbs(HttpVerbs.Post)]
[AcceptParameter(Name = "button", Value = "save")]
public ActionResult Dossier_Save(string button, DossierModel dossierModel, string returnUrl)
{
if (!Request.IsAuthenticated)
return RedirectToAction("Index", "Home");
if (!ModelState.IsValid) return View(dossierModel);
Dossier dossier = mappingEngine.Map<DossierModel, Dossier>(dossierModel);
repository.Save(dossier);
return View();
}
여기 난 그냥 서류에 dossiermodel을 오토와 저장소를 사용하여 저장할 :
다음 나는 서류를 저장하는 데 사용되는 제어 방법이있다.
이제 Nunit을 사용하여 단위 테스트를 수행하고 싶습니다. 나는 아무것도 모의하고 싶지 않다, 나는 컨트롤러 수준에서 진정한 지속성 테스트를 원한다. 이를 위해 새로운 책임자 컨트롤러를 만들고 올바른 인수를 전달해야합니다. 지금 나는 잃었다. 웹 응용 프로그램과 똑같이 작동하도록 인수를 만들고 구성하는 방법은 무엇입니까? 예를 들면 : Unittest에 Automapper를 올바르게 구성하려면 어떻게해야합니까? 올바르게 구성된 저장소를 작성하려면 어떻게해야합니까? 컨테이너를 사용해야합니까?
도움이 필요하시면 코드 예제를 제공해 주시면 대단히 감사하겠습니다.
미리 감사드립니다.
감사! Im new 이것에, 당신은 pls 조롱의 예가 있습니까? 친절한 점, Hein – Hein73
조롱은 기본적으로 인터페이스의 가짜 인스턴스를 설정하고 미리 준비된 응답을 반환하도록 설정한다는 의미입니다. Rhino Mock을 사용하여 모킹 서비스를위한 라이브러리를 사용해야합니다. 비록 Moq이 대중적이라는 것을 알고 있지만. 기본적인 예를 보려면 [link] (http://hibernatingrhinos.com/open-source/rhino-mocks)를보십시오. – StanK
그래서 내가 제대로 이해한다면 모의는 실제 데이터베이스에 액세스하지 못한다는 것을 의미합니다. 그런데 컨트롤러를 테스트 할 때 컨트롤러를 어떻게 테스트 할 수 있습니까? 또는 컨트롤러에서 실제 Save 메서드를 호출하지 않아야합니까? 이제 저는 컨트롤러에서 repository.save를 직접 호출합니다. 똑똑한가? 안 그래요? – Hein73