- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 HandRank 的类,它有一个 Id 属性。 Id 属性由我的数据库生成。
public class HandRank
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Rank { get; set; }
}
我有一个名为 GetHandRanks 的方法,它返回一个 Dictionary<string, HandRank>
.
在我的测试中,我在内存数据库中播种。由于 Id 属性由数据库确定,因此我希望将其从我的断言中排除。
下面是我的测试,但它失败了,因为 Id 属性没有在 expectedResult 中设置。我没有设置 Id,因为我不知道数据库生成的 Id 是什么。
[Test]
public void Test()
{
// arrange
var expectedResult = new Dictionary<string, HandRank>
{
{ "aaa", new HandRank { Rank = 1} },
{ "bbb", new HandRank { Rank = 2} }
};
// act
var actualResult = _handRankManager.GetHandRanks();
// Assert
actualResult.Should().BeEquivalentTo(expectedResult);
}
我希望断言需要类似于下面的内容,但我无法正确排除 Excluding 方法中的 lambda。
actualResult.Should().BeEquivalentTo(expectedResult, options => options.Excluding(x => x.Values.Id));
最佳答案
首先,如果您只想过滤掉HandRank.Id
,那么您可以使用以下方法:
actualResult.Should().BeEquivalentTo(expectedResult, opt =>
opt.Excluding(m =>
m.SelectedMemberInfo.DeclaringType == typeof(HandRank)
&& m.SelectedMemberInfo.Name.Equals(nameof(HandRank.Id))
));
如果忽略名为 "Id"
的属性是您希望在测试的许多部分中使用的东西,您最好将其取出到这样的函数中:
public static EquivalencyAssertionOptions<_> ExcludeId<_>(EquivalencyAssertionOptions<_> opt)
=> opt.Excluding(m => m.SelectedMemberInfo.Name.Equals("Id"));
并这样使用它:
actual.Should().BeEquivalentTo(expected, ExcludeId);
应该适用于字典、列表、具有深层属性的对象,以及您能想到的任何东西。它将完全忽略所有名为 Id
的成员。
编辑 2022:
根据下面的反馈,6.0 有一个 breaking change将 SelectedMemberInfo
属性扁平化为 IMemberInfo
,这使得排除项更易于阅读。
actual.Should().BeEquivalentTo(expected, opt =>
opt.Excluding(member =>
member.DeclaringType == typeof(X)
&& member.Name.Equals(nameof(X.Id))
));
关于c# - 流利的断言 : Dictionary Should BeEquivalentTo Excluding Property on Dictionary Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64777580/
如何比较具有名称相同但类型不同的属性的对象? public class A { public Guid Id { get; set; } } public class B { publ
我正在集成测试中创建两个相同类型的对象,但试图排除在创建对象时生成的自动递增成员。 我成功排除了 RecordId 和 Number 属性,但对 Id 属性的等效性测试失败。 RecordId 和 n
我有一个测试来验证方法的集合输出。此测试变体通过了: [TestMethod, TestCategory("BVT")] public void TheStatusesAreRetur
尝试比较具有单个私有(private)字段的对象 像这样的对象: public struct A { private readonly byte[] bytes; public A(b
我在单元测试中使用流畅的断言,但是使用 ShouldBeEquivalentTo , ShouldAllBeEquivalentTo , 和 BeEquivalentTo不清楚。 例如;以下所有语句都
谁能总结一下它们之间的区别和使用范围? 我阅读了 SO 文章, ShouldBeEquivalientTo() :ShouldBeEquivalentTo() 旨在用于比较复杂的对象图,而不是 .NE
我有以下测试说明了我试图实现的一个简单示例(两个等效列表的比较): [Fact] public void Test() { // Arrange var list1 = new Lis
我有一个名为 HandRank 的类,它有一个 Id 属性。 Id 属性由我的数据库生成。 public class HandRank { [Key] [DatabaseGenerat
我有一个名为 HandRank 的类,它有一个 Id 属性。 Id 属性由我的数据库生成。 public class HandRank { [Key] [DatabaseGenerat
我有一个简单的类,它有两个属性并覆盖了 Equals 方法: public class Person : IEquatable { public Guid Id { get; set; }
我是一名优秀的程序员,十分优秀!