如何在C#中为create方法编写单元测试?

时间:2017-12-03 20:08:53

标签: c# .net entity-framework unit-testing moq

我想在C#中为我的add方法编写单元测试。我的方法有一个dog实体,类型为参数。此方法通过我的服务将其添加到数据库。

  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);
    }

我想检查单元测试,我的方法正常工作,默认小狗可以添加到狗,或者如果用户添加有效(或没有)属性...我在这一点上有点困惑。

1 个答案:

答案 0 :(得分:3)

您应该将Controller的代码重构为单独的视图模型类。这允许直接测试视图模型而无需与MVC框架交互。请参阅MVVM模式。

<强>控制器 创建,构建和返回视图模型类。只有特定于视图的逻辑应该在这里(如果有的话),因为它不能直接测试。

<强>视图模型 执行视图的所有逻辑操作,例如数据库查询。可以直接测试。

代码示例

<强>控制器

UITableView

查看模型类

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)
   ...
}

<强>测试

public async Task<ActionResult> Add(Dog dog, string type)
{
    if (!ModelState.IsValid)
        return View(dog);

    var vm = new AddDogVM(dogService);
    vm.Add(dog, type);

    return RedirectToAction("Home");
}