【发布时间】:2021-07-16 20:38:28
【问题描述】:
我有一个单元测试来验证控制器方法GetUser,我想调查resultsets 是否有任何错误。
public void TestApiGetUser()
{
GenericController controller = new GenericController();
var result = controller.GetUser();
result.ShouldNotBeNull();
var resultObject = Assert.IsType<JsonResult>(result);
var data = ((ActionResult<IEnumerable<Resultset>>)(JsonResult)result).Value as IEnumerable<Resultset>; //this is returning null
//how to access data.Any(x => x.IsError) to test if there is any error in the API call?
}
控制器具有以下GetUser 端点,如下所示:
[HttpPost]
[Route("User")]
public JsonResult GetUser()
{
var result = _apiOrchestrator.GetUserData();
return Json(result);
}
GetUserData() 看起来像:
public IEnumerable<Resultset> GetUserData()
{
IEnumerable<Resultset> result = null;
//Some code
//Fill result object with user data
return result;
}
Resultset 对象如下所示:
public class Resultset
{
public string Name { get; set; }
public string Data { get; set; }
public bool IsError { get; set; } = false;
public List<string> ErrorMessages { get; set; }
}
我在 SO 中阅读了很多文章,但没有看到任何对我有用的东西。任何帮助将不胜感激。
UPDATE 2:
如果我这样做:
var model = Assert.IsAssignableFrom<IEnumerable<Resultset>(resultObject.Value);
Assert.True(resultsets.Any(x=>x.IsError));
我想我在上面的代码中找到了某个地方。但是,这是最好的方法吗?
【问题讨论】:
-
您正在使用默认构造函数(无参数)创建
GenericController的实例。在GetUser中,您有以下代码:var result = _apiOrchestrator.GetUserData();。问:调试你的测试时_apiOrchestrator的值是多少? -
那是在构造函数中发起的,是一个有效的对象。而且,GenericController 确实将数据返回给单元测试。
-
我用我认为可行的解决方案更新了我的帖子,但如果这是最好的解决方案,我需要一个建议。
标签: .net unit-testing asp.net-core