c# - 单元测试:使用谓词对列表执行 FindAll 时出现空引用异常
问题描述
我在抽象类 FakeEntityBaseRepository 中有一个方法,名为 FindBy,代码如下:
public IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate, params string[] includeProperties)
{
Func<T, bool> func = predicate.Compile();
Predicate<T> pred = func.Invoke;
var result = list.FindAll(pred);
if (result == null)
{
list.Clear();
return list;
}
return result;
}
在将上面的代码更新为现在的代码后,我有几个单元测试失败,示例测试将编写如下:
[Test]
public void GetSequencedParts_WhenCalled_ReturnsAllSequencedParts()
{
// Arrange
PartController partController = GetController(null, null, null, null);
// Act
OkObjectResult result = (OkObjectResult)partController.GetSequencedParts();
// Assert
Assert.IsInstanceOf<List<PartViewModel>>(result.Value);
List<PartViewModel> PartList = (List<PartViewModel>)result.Value;
Assert.AreEqual(1, PartList.Count);
}
控制器方法如下所示:
[HttpGet("sequenced")]
public IActionResult GetSequencedParts()
{
try
{
IEnumerable<Part> parts = partRepository
.FindBy(x => x.Sequences.Count > 0, "SomeString", "SomeString2")
.ToList();
IEnumerable<PartViewModel> partVMs = Mapper.Map<IEnumerable<Part>, IEnumerable<PartViewModel>>(parts);
return new OkObjectResult(partVMs);
}
catch (Exception ex)
{
return new BadRequestObjectResult(ex);
}
}
我收到此特定方法的异常。我应该提到 FindBy 方法适用于其他单元测试,但在这几个单元测试中失败了。
该异常是 NullReferenceException 的一种类型,并且附加了以下堆栈跟踪消息:
at lambda_method(Closure , Part )
at System.Collections.Generic.List`1.FindAll(Predicate`1 match)
at API.Tests.Fakes.FakeEntityBaseRepository`1.FindBy(Expression`1 predicate, String[] includeProperties) in C:\Jake_Projects\API\JakeUnitTestsRecovery\API.Tests\Fakes\FakeRepositories\FakeEntityBaseRepository.cs:line 82
at API.Controllers.PartController.GetSequencedParts() in C:\Jake_Projects\API\JakeUnitTestsRecovery\API\Controllers\PartController.cs:line 68
感谢您的时间,
杰克
解决方案
推荐阅读
- twitter-bootstrap - 如何在 nuxt.js 中使用 uiv 模块
- arrays - 字符串的构造
- ssl - Gitlab Enterprise 和 Atlassian Jira 集成 - SSL 证书验证错误
- python - 如何找到我的 xlsx 表中存在的带有熊猫的缺失列?
- javascript - WebComponents 向侧边栏添加元素
- asp.net - 使用 Azure AD JWT (id_token) 登录我的 API
- javascript - 从 URL 参数(作为字节)到 JSON 字符串
- php - 在 PHP REST API 中翻译响应和请求
- asp.net-core - Open XML Library 可以支持 CSV 文件读取操作吗?
- php - 国家、州和邮政编码的动态相关选择框