Я пытаюсь создать несколько простых модульных тестов для своих контроллеров, и я столкнулся с проблемой.Mocking поставщик WebSecurity
Я использую новый поставщик членства в MVC 4 и получаю WebSecurity.CurrentUserId
и сохраняя это значение в базе данных.
Когда я запускаю свои юнит-тесты против этого, он терпит неудачу, и я думаю, что я отслеживаю это снова, потому что WebSecurity
не издевается.
Вот мой код, если это помогает на всех,
Контроллер
[HttpPost]
public ActionResult Create(CreateOrganisationViewModel viewModel)
{
if (ModelState.IsValid)
{
Group group = _groupService.Create(
new Group
{
Name = viewModel.Name,
Slug = viewModel.Name.ToSlug(),
Profile = new Profile
{
Country = viewModel.SelectedCountry,
Description = viewModel.Description
},
CreatedById = WebSecurity.CurrentUserId,
WhenCreated = DateTime.UtcNow,
Administrators = new List<User> {_userService.SelectById(WebSecurity.CurrentUserId)}
});
RedirectToAction("Index", new {id = group.Slug});
}
return View(viewModel);
}
Тест
[Test]
public void SuccessfulCreatePost()
{
CreateOrganisationViewModel createOrganisationViewModel = new CreateOrganisationViewModel
{
Description = "My Group, bla bla bla",
Name = "My Group",
SelectedCountry = "gb"
};
IUserService userService = MockRepository.GenerateMock<IUserService>();
IGroupService groupService = MockRepository.GenerateMock<IGroupService>();
groupService.Stub(gS => gS.Create(null)).Return(new Group {Id = 1});
GroupController controller = new GroupController(groupService, userService);
RedirectResult result = controller.Create(createOrganisationViewModel) as RedirectResult;
Assert.AreEqual("Index/my-group", result.Url);
}
Благодаря
Я использовал то, что вы сказали, но взял его дальше и связал все это. Спасибо за помощь –