【发布时间】:2021-10-25 11:57:43
【问题描述】:
我使用 XUnit 和 Shouldly 编写了这个单元测试。请注意,我替换了部分命名空间、变量名、属性等,因为客户是一个大型公共组织。
[Fact]
public async void ValidateCreateXXXX_InvalidIdVersionAndStatus_Should_Fail()
{
// Arrange
var XXXX = new XXXX.Microservices.XXXX.Models.XXXX
{
Id = 1,
CreatedDateTime = DateTime.Now,
CreatedBy = "Test",
UpdatedDateTime = DateTime.Now,
UpdatedBy = "Test",
KlientId = 1,
Version = 0,
Status = XXXXStatus.Oprettet
};
var sut = new XXXXBusinessRule();
// Act
var result = await sut.ValidateCreateXXXX(XXXX);
// Assert
result.IsSuccess.ShouldBeFalse();
result.ResultType.ShouldBe(ResultType.Invalid);
((Dictionary<string, string[]>)result.Data).ShouldContainKeyAndValue("Id", new []{ "'Id' must be equal to '0'." });
}
所以问题是我的测试失败并显示以下消息:
Shouldly.ShouldAssertException : (Dictionary<string, string[]>)result.Data
should contain key
"Id"
with value
["'Id' must be equal to '0'."]
but value was
["'Id' must be equal to '0'."]
at
XXXX.Unit.BusinessRule.XXXXBusinessRuleTests.ValidateCreateXXXX_InvalidIdVersionAndStatus_Should_Fail() in C:\Source\XXXX\XXXX-udvikling\Test\XXXX.Unit\BusinessRule\XXXXBusinessRuleTests.cs:line 60
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__139_0(Object state)
请注意,预期值和实际值完全相同。这里到底发生了什么?这个错误对我来说没有多大意义。我也尝试过使用ShouldContainKey("Id"),它可以工作。那么问题一定是字符串数组?
有人可以帮我弄清楚我做错了什么吗?感谢所有帮助。
【问题讨论】:
-
我假设应该通过引用比较数组。由于您在断言中更新了数组,因此它们在技术上并不相同。您将需要比较数组中的项目。
-
-
感谢你们的cmets。所以我认为当 value 是字符串数组时,ShouldContainKeyAndValue() 方法不能轻易使用。 Shouldly 文档中也没有这方面的示例。
标签: c# .net-core xunit shouldly