【发布时间】:2018-06-25 00:35:51
【问题描述】:
有没有使用 Fluent Assertions 断言元组的方法?
var t1 = new Tuple<Guid, IEnumerable<Guid>>(Guid.Parse("{DA18B047-2F62-45F0-A437-748976B41D22}"),
new [] { Guid.Parse("{DA18B047-2F62-45F0-A437-748976B41D22}") });
var t2 = new Tuple<Guid, IEnumerable<Guid>>(Guid.Parse("{DA18B047-2F62-45F0-A437-748976B41D22}"),
new[] { Guid.Parse("{DA18B047-2F62-45F0-A437-748976B41D22}") });
这是使用以下任一方法断言的:
t1.Should().ShouldBeEquivalentTo(t2);
t1.ShouldBeEquivalentTo(t2);
结果:
Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException : Expected item[0] to be (da18b047-2f62-45f0-a437-748976b41d22, System.Collections.Generic.List`1[System.Guid]), but found (da18b047-2f62-45f0-a437-748976b41d22, System.Collections.Generic.List`1[System.Guid]).
Expected item[1] to be (119d681c-9171-4ecd-86b6-3b4417ad167c, System.Collections.Generic.List`1[System.Guid]), but found (119d681c-9171-4ecd-86b6-3b4417ad167c, System.Collections.Generic.List`1[System.Guid]).
我也试过了:
t1.Should().Be(t2);
另外,我也不在乎Guids的顺序。
更新
我目前为此使用 4.1.1。升级到 4.19.4 会产生相同的结果。
我也尝试过在 v5 预发布中使用:
t1.Should().BeEquivalentTo(t2);
【问题讨论】:
-
我感觉这与this bug有关。
-
不。它不相关。元组通过使用
Equals比较该元组中的各个类型来实现Equals。由于其中一种类型是IEnumerable<T>,因此这永远不会起作用。 -
我猜上面的评论应该是公认的答案?最后,我只在我的场景中使用了匿名类型。
标签: c# unit-testing tuples fluent-assertions