【发布时间】:2016-12-01 01:11:16
【问题描述】:
我的印象是模拟是伪造数据调用,因此没有什么是真实的。因此,当我尝试创建与团队中其他开发人员所做的非常相似的自己的单元测试时,我认为更新服务是不正确的。
[Test]
public void TemplateService_UpdateTemplate_ContentNameNotUnique_ServiceReturnsError()
{
Template Template = new Template()
{
TemplateId = 123,
};
// Arrange.
TemplateUpdateRequest request = new TemplateUpdateRequest()
{
ExistingTemplate = Template
};
var templateRepo = new Mock<ITemplateRepository>();
var uproduceRepo = new Mock<IUProduceRepository>();
templateRepo.Setup(p => p.IsUniqueTemplateItemName(215, 456, "Content", It.IsAny<string>())).Returns(false);
templateRepo.Setup(p => p.UpdateTemplate(request)).Returns(1);
// Act.
TemplateService svc = new TemplateService(templateRepo.Object, uproduceRepo.Object);
TemplateResponse response = svc.UpdateTemplate(request);
// Assert.
Assert.IsNotNull(response);
Assert.IsNotNull(response.data);
Assert.IsNull(response.Error);
}
所以我的问题在于这段代码:
TemplateService svc = new TemplateService(templateRepo.Object, uproduceRepo.Object);
TemplateService 真的应该更新吗? “如果”服务最终命中数据库和/或文件系统会怎样?那么它就变成了集成测试,不再是单元测试了,对吧?
TemplateResponse response = svc.UpdateTemplate(request);
另外,我如何真正控制这是否真的会通过?是依赖一个我没有写的服务调用,如果有bug,或者遇到问题怎么办,或者返回NULL,这正是我不想要的! ?
【问题讨论】:
标签: c# asp.net-mvc unit-testing nunit moq