Я очень новичок в модульном тестировании, поэтому сегодня я начинаю свой первый набор тестов. Я использую библиотеку JustMock
от Telerik. Хотя любая информация о модульном тестировании хороша. У меня возникли проблемы с интерфейсной службой, которая проходит через мой метод. Ниже мой метод MembershipController.Register(model)
...
[CaptchaValidator]
[HttpPost]
public ActionResult Register(Models.Membership.Registration model)
{
// just for good mesure, truncate any spaces that are given
System.Text.RegularExpressions.Regex.Replace(model.Email, @"\s", "");
if (ModelState.IsValid)
{
// Attempt to register the User and return any applicable status that has to do
// with the result.
var createStatus = membershipService.RegisterMember(model.Email, model.Password);
// if the member is able to be created successfully, log them in now and begin the
// authentication portion of the registration, otherwise, display the registration
// errors and return to the view.
if (createStatus == Membership.MemberCreateStatus.Success)
{
formsAuthentication.SignIn(model.Email, false /* createPersistentCookie */);
return RedirectToAction("Success");
}
else
{
ModelState.AddModelError("", Membership.Validator.ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
И вот жалкий тест, который я пытаюсь запустить...
[TestMethod]
public void Register_Post_ReturnsRedirectOnSuccess()
{
// Arrange
var controller = Mock.Create<Web.Controllers.MembershipController>();
var repository = Mock.Create<Membership.IMembershipService>();
Mock.Arrange(() => repository.RegisterMember("[email protected]", "acceptiblePassword")).Returns(Membership.MemberCreateStatus.Success);
// Model
var model = new Web.Models.Membership.Registration
{
Email = "[email protected]",
Password = "acceptiblePassword",
ConfirmPassword = "acceptiblePassword"
};
// Act
var result = controller.Register(model);
// Assert
Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
}
Тест не пройден, потому что membershipService
разрешается как null. Я не уверен, что делать здесь. Это мое первое знакомство с аспектом модульного тестирования ASP.NET MVC. Кто-нибудь может дать мне совет?
Я использую Ninject
для ввода IMembershipService
через конструктор. Он реализован классом MembershipService
. Код работает нормально, когда я его запускаю, но модульные тесты терпят неудачу.
repository
в свой контроллер. Обычно у вас будетIMembershipService
в качестве параметра в конструкторе вашего контроллера, который вы можете передать при необходимости или использовать локатор службы MVC, чтобы захватить экземпляр Ninject и передать его. - person Buildstarted   schedule 18.02.2011