В моем простом Index() ActionMethod я ссылаюсь на свойство User.Identity. Итак, я подумал, что мне нужно издеваться над этим.
Поэтому я создаю макет HomeController и использую его в своем модульном тесте. Когда я это делаю, ActionMethod возвращает null в качестве представления. Когда я заменяю mock-контроллер конкретным экземпляром (и, конечно же, закомментирую любую ссылку на User.Identity), тогда возвращается правильное представление.
eg.
// Arrange.
var homeController = Mock<HomeController>(..);
homeController.Setup(x => x.User).Returns(new GenericPrincipal(..));
// Act.
var result = homeController.Index();
// Assert.
Assert.IsNotNull(result); // This fails here. result is NULL.
но когда я делаю это (и комментирую любую ссылку User), это работает...
// Arrange.
var homeController = new HomeController(..);
// Act.
var result = homeController.Index();
// Assert.
Assert.IsNotNull(result); // Tick!
Есть идеи, почему это так?
.Index(), является макетом, что не имеет смысла. Этот макет никогда ничего не сделает, если только вы явно не скажете ему делать что-то или возвращать что-то. Другими словами, вы тестируете макет. - person Lasse V. Karlsen   schedule 24.10.2011