【发布时间】:2018-05-17 07:01:44
【问题描述】:
我想在 C# 中为我的 add 方法编写单元测试。我的方法有一个狗实体和类型作为参数。这个方法通过我的服务将它添加到数据库中。
public async Task<ActionResult> Add(Dog dog, string type)
{
if (ModelState.IsValid)
{
var d = new Dog();
d.Name = dog.Name;
d.NumOfLegs = dog.NumOfLegs;
d.BirthdayDate = dog.BirthdayDate;
if(type == "mom"){
//when the dog is a mom, dog.Childrens got default puppies
InitChildrenOfMomDog(dog);
}
dogService.Insert(dog);
return RedirectToAction("Home");
}
return View(dog);
}
我想检查单元测试,我的方法工作正常,默认小狗添加到狗身上,或者用户是否添加了有效(或不)属性......我在这一点上有点困惑。
【问题讨论】:
-
从技术上讲,纯“单元”测试很可能不会测试像这样依赖于 Mvc 框架的函数 - 您可能希望查看提取
IsValid和return之间的代码(并且知道如何模拟dogService)。还是您想要一个集成测试来模拟 Web 客户端调用此 API 时会发生什么? -
是的,我想了解 mocking,我读过它,在这种情况下会很棒,但我很困惑,我该怎么做。
-
真的取决于您使用的平台。但只要
dogService被声明为某种接口,可以用暴露相同功能的模拟类型替换,这应该不难。顺便说一句,您实际上是否从 Web 客户端对此进行了测试并确认它在数据库中存储了新的 Dogs?只是通常我希望在某处看到SaveChanges()调用(但也许它在您的“插入”函数中)。 -
我检查了它,并且狗正确地保存到了数据库中。正如你所说,服务是项目中的一个接口。
标签: c# .net entity-framework unit-testing moq