【问题标题】:Unit testing Web API Controller: Error fetching result单元测试 Web API 控制器:获取结果时出错
【发布时间】:2016-08-12 03:19:03
【问题描述】:

我是 ASP.NET 单元测试的新手,所以请原谅我对此的无知。我正在尝试测试我的控制器。

这是我正在测试的控制器中的功能:

public IHttpActionResult GetCustId(string name)
{
    var c_id = db.Customer.Where(s => (s.c_Name == name));

    if (c_id == null)
    {
        return null;
    }

    return Ok(c_id);
}

这是我的单元测试代码:

public void GetName_ShouldReturnCorrectId()
{
    var context = new TestSContext();
    context.Customers.Add(new Customer { c_ID = 1, c_Name = "jonny"});

    var controller = new CustomerController(context);
    var result = controller.GetCustId("Johnny") as OkNegotiatedContentResult<Customer>;  //ISSUE: Result is always NULL

    Assert.IsNotNull(result);
    Assert.AreEqual(1, result.Content.c_ID);
}

问题就在这里:

var result = controller.GetServiceId("Johnny") as OkNegotiatedContentResult<Customer>

因为它总是返回 NULL。

但是...如果我只使用这个:

var result = controller.GetCustId("Johnny");

那么结果不为空。第一个断言通过了。

但我不能使用它,因为我不确定如何在不使用result.Content 的情况下检查第二个断言语句。我真的不确定在我的案例中要测试的最佳实践是什么。

感谢任何帮助。

【问题讨论】:

  • 关于GetServiceId的部分看不懂;您写道GetCustId 是您要测试的方法...关于第一个断言,您可以将其删除,如果结果为空,第二个断言将失败...result.Content 有什么问题?

标签: c# asp.net unit-testing mstest assert


【解决方案1】:

当您将"jonny" 放入您的模拟context 时,您正试图找到"Johnny"(带有'h'),因此由于您的if 语句,该方法总是返回null

if (c_id == null)
{
   return null;
}

【讨论】:

    【解决方案2】:

    添加到@nizzik 的答案(根据您的示例是正确的)以避免简单的错误,例如您应该将值存储在变量中并重用它们以确保它们符合预期。

    public void GetName_ShouldReturnCorrectId() {
        //Arrange
        var name = "Johnny";
        var expectedId = 1;
        var context = new TestSContext();
        context.Customers.Add(new Customer { c_ID = expectedId, c_Name = name});    
        var controller = new CustomerController(context);
    
        //Act
        var result = controller.GetCustId(name) as OkNegotiatedContentResult<Customer>;
    
        //Assert
        Assert.IsNotNull(result);
        Assert.AreEqual(expectedId, result.Content.c_ID);
    }
    

    这样您就可以更改其中任何一个,并且测试应该按预期执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多