单元测试Web API控制器:获取结果错误
本文关键字:获取 结果 错误 控制器 Web API 单元测试 | 更新日期: 2023-09-27 18:02:09
我是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");
则结果不为空。第一个assert通过。
但是我不能使用它,因为我不确定如何在不使用result.Content
的情况下检查第二个断言语句。我真的不确定在我的情况下测试的最佳实践是什么。
感谢您的帮助。
当您将"jonny"
放入模拟context
时,您正试图找到"Johnny"
(带有'h'),因此方法总是返回null
,因为您的if语句
if (c_id == null)
{
return null;
}
添加到@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);
}