asp.net-core - Xunit 测试 SerializedError 返回对象值

标签 asp.net-core xunit

我正在使用 Xunit 编写 Controller 逻辑的单元测试。

我的 Controller 操作之一返回带有 ModelStateDictionary 对象的 BadRequestObjectResult:

if (!ModelState.IsValid)
{
    return BadRequest(ModelState);
}

为此,我的测试用例添加了一个 ModelState 错误,如下所示:

controller.ModelState.AddModelError("Test", "This is a test model error");

在我的测试用例的 Assert 语句中,我正在检查类型为 SerializedError 的返回对象:

var returnError = Assert.IsType<SerializableError>(objectResult.Value);
Assert.Single(returnError);
Assert.True(returnError.ContainsKey("Test"));
Assert.True(returnError.ContainsValue("This is a test model error"));

Assert.Single(returnError);Assert.True(returnError.ContainsKey("Test")); 检查按预期成功通过。

但是,对错误值的检查失败(它返回 false 但我希望它返回 true):

Assert.True(returnError.ContainsValue("This is a test model error"));

从调试中我可以看到该值似乎嵌套在一个额外的string对象中:

enter image description here

但我无法编写测试该值的测试。我该怎么做?

最佳答案

正如另一个答案中提到的,Dictionary 的值是一个数组,因此您应该在断言中解决该问题。

var returnError = Assert.IsType<SerializableError>(objectResult.Value);

var errors = objectResult.Value as SerializableError;
Assert.Single(errors);
Assert.True(errors.ContainsKey("Test"));

var errorValues = returnError["Test"] as string[];
Assert.Single(errorValues);
Assert.True(errorValues.Single() == "This is a test model error");

因为 SerializedError 继承自 Dictionary,因此您应该能够在 FluentAssertions 库的帮助下以更清晰的方式完成它

var expected = new SerializableError
{
    { "Test", new[] {"This is a test model error"}},
};

objectResult.Value.Should().BeOfType<SerializableError>();
objectResult.Value.Should().BeEquivalentTo(expected);

关于asp.net-core - Xunit 测试 SerializedError 返回对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155343/

相关文章:

c# - 代理调用远程 json 以避免 CORS 问题

c# - 为什么 nameof 不能与 CreationAtAction return 语句一起使用

.net - xUnit dotnet test CLi 输出到 NUnit xml 以便 Bamboo 可以读取结果

asp.net - 单元测试未通过,因为没有看到 api Controller 的任何返回

c# - F#:为什么这两个集合不相等?

c# - 项目引用 .net 核心类库问题

asp.net-core - 获取 ASP Net.Core Signalr (.NET Core 2.1) RC 的集线器上下文

c# - 测试自定义工厂中间件

c# - .net 核心模拟 dbcontext 不工作(静态问题?)

asp.net-core - 在 .NET Core 2.0 下添加 Entity Framework 迁移时出现 "Parameter count mismatch"错误