我有一堂课:
public class TestClass
{
public int Id { get; set; }
public int CampusId { get; set; }
public int CurrentStudentCount { get; set; }
public int MaxStudentCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以及该类的对象集合:
var collection = new[]
{
new TestClass
{
Id = 55,
CampusId = 38,
CurrentStudentCount = 1,
MaxStudentCount = 2
},
new TestClass
{
Id = 127,
CampusId = 38,
CurrentStudentCount = 2,
MaxStudentCount = 2
},
new TestClass
{
Id = 126,
CampusId = …
Run Code Online (Sandbox Code Playgroud) 似乎Fluent Assertions在NUnit的Assert.Multiple
块中不起作用:
Assert.Multiple(() =>
{
1.Should().Be(2);
3.Should().Be(4);
});
Run Code Online (Sandbox Code Playgroud)
运行此代码时,测试在第一次断言后立即失败,因此第二个断言甚至没有执行.
但是,如果我使用NUnit的本机断言,我会得到我想要的结果:
Assert.Multiple(() =>
{
Assert.That(1, Is.EqualTo(2));
Assert.That(3, Is.EqualTo(4));
});
Run Code Online (Sandbox Code Playgroud)
输出包含两个故障的详细信息:
测试失败 - ExampleTest()
消息:预期:2但是:1
测试失败 - ExampleTest()
消息:预期:4但是:3
如何使用NUnit的Fluent Assertions获得类似的结果?
可以使用LINQ的查询语法重写此方法吗?
public IEnumerable<Item> GetAllItems()
{
return Tabs.SelectMany(tab =>
{
tab.Pick();
return tab.Items;
});
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚tab.Pick()
方法调用的位置.
我正在尝试比较具有多个属性的两个对象,但需要使用谓词来比较特定属性(object1
在 处没有这些属性的确切值object2
,因此我需要在那里比较部分字符串)。
所以,我正在尝试:
object1.Should().BeEquivalentTo(object2, options => options
.Including(o => o.Property1.StartsWith("something"))
.Including(o => o.Property2.StartsWith("something else")
);
Run Code Online (Sandbox Code Playgroud)
我希望所有其他属性都能像往常一样进行比较。
然而,运行上面的代码会抛出异常:
消息:System.ArgumentException:表达式
<Convert(o.Property1.StartsWith("something"), Object)>
不能用于选择成员。参数名称:表达式
我检查了文档,它的示例与我的示例相同(https://fluidassertions.com/objectgraphs/上的“选择成员”一章)。
为什么会出现此异常以及如何修复它?