【发布时间】: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