[英]MVC3 Unit Test Controller with Property Injection
我有一个使用属性注入的MVC3项目。 在我的控制器中,我调用了一个服务类。 正如我提到的,它使用属性注入(带有unity )而不是通过构造函数来解决。 我四处搜寻,试图找到一个可以解决控制器内这些依赖关系的单元测试示例,但似乎所有内容都涉及构造器DI。 我感到沮丧。 任何帮助都会很棒。
控制器示例:
[Dependency]
public ITrainingService trainingService { get; set; }
public ActionResult Index(MyTrainingView myTrainingView)
{
//Load all training items into view object
myTrainingView.training = trainingService.getTraining(myTrainingView.trainingId);
myTrainingView.videos = trainingService.getTrainingVideos(myTrainingView.trainingId);
myTrainingView.visuals = trainingService.getTrainingVisuals(myTrainingView.trainingId);
myTrainingView.exams = trainingService.getTrainingExams(myTrainingView.trainingId);
return View(myTrainingView);
}
我正在尝试运行单元测试时解决trainingService。 我发现了无数使用构造函数依赖项来模拟和解析依赖项的示例,但在属性注入方面却一无所获。
您不需要在单元测试中依靠统一性。
这样的事情可以解决问题:
[Test]
public void GetTrainingById()
{
var mockService = MockRepository.GenerateMock<ITrainingService>();
mockService.Stub(service => service.getTraining(123)).Return(new ImaginaryClass());
var sut = new TrainingController();
sut.trainingService = mockService;
var myTrainingView = new MyTrainingView();
sut.Index(myTrainingView);
Assert.AreEqual(expected, myTrainingView.training);
}
如果必须在单元测试中使用unity,则UnityContainer
在测试中实例化UnityContainer
并使用RegisterInstance
注册要注入的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.