Mik*_*ins 1 c# xunit fluent-assertions
我有以下测试说明了我试图实现的一个简单示例(两个等效列表的比较):
[Fact]
public void Test()
{
// Arrange
var list1 = new List<IDomainEvent> { new BusinessCreatedDomainEvent { Name = "Microsoft" } };
var list2 = new List<IDomainEvent> { new BusinessCreatedDomainEvent { Name = "Microsoft" } };
// Act
// Assert
list1.Should().BeEquivalentTo(list2);
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,每个列表应该能够包含从IDomainEvent
界面派生的任意数量的不同类型的项目.测试目前失败.我怀疑它与Should().BeEquivalentTo
不适合比较运行时指定的类型有关.我如何配置此示例,以便测试通过?
目前测试结果如下:
[8/14/2018 5:21:26 PM Error] [xUnit.net 00:00:00.7909767] BusinessWrite.UnitTests.Infrastructure.EventStoreUnitTests.Test [FAIL]
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7922005] System.InvalidOperationException : No members were found for comparison. Please specify some members to include in the comparison or choose a more meaningful assertion.
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7932461] Stack Trace:
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7941986] C:\projects\fluentassertions-vf06b\Src\FluentAssertions\Equivalency\GenericEnumerableEquivalencyStep.cs(74,0): at FluentAssertions.Equivalency.GenericEnumerableEquivalencyStep.Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config)
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7945426] C:\projects\fluentassertions-vf06b\Src\FluentAssertions\Equivalency\EquivalencyValidator.cs(85,0): at FluentAssertions.Equivalency.EquivalencyValidator.AssertEqualityUsing(IEquivalencyValidationContext context)
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7946187] C:\projects\fluentassertions-vf06b\Src\FluentAssertions\Equivalency\EquivalencyValidator.cs(38,0): at FluentAssertions.Equivalency.EquivalencyValidator.AssertEquality(EquivalencyValidationContext context)
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7946610] C:\projects\fluentassertions-vf06b\Src\FluentAssertions\Collections\CollectionAssertions.cs(394,0): at FluentAssertions.Collections.CollectionAssertions`2.BeEquivalentTo[TExpectation](IEnumerable`1 expectation, Func`2 config, String because, Object[] becauseArgs)
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7947629] C:\projects\fluentassertions-vf06b\Src\FluentAssertions\Collections\CollectionAssertions.cs(331,0): at FluentAssertions.Collections.CollectionAssertions`2.BeEquivalentTo[TExpectation](IEnumerable`1 expectation, String because, Object[] becauseArgs)
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7948569] C:\Users\Christian\source\repos\unify\src\Services\Business\BusinessWrite\BusinessWrite.UnitTests\Infrastructure\EventStoreUnitTests.cs(43,0): at BusinessWrite.UnitTests.Infrastructure.EventStoreUnitTests.Test()
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.8058517] Finished: BusinessWrite.UnitTests
Run Code Online (Sandbox Code Playgroud)
Jon*_*rup 10
我怀疑界面IDomainEvent
没有任何public
属性.这解释了您所看到的异常,因为逻辑在BeEquivalentTo()
使用属性时IDomainEvent
因为列表属于类型List<IDomainEvent>
.
要使用属性来比较两个列表BusinessCreatedDomainEvent
,您可以改为使用
list1.Should().BeEquivalentTo(list2, options => options.RespectingRuntimeTypes());
Run Code Online (Sandbox Code Playgroud)
从文档中
默认情况下,在递归比较期间选择要处理的成员时,Fluent Assertions会尊重对象或成员的声明(编译时)类型.也就是说,如果受试者是OrderDto但它被分配给变量的类型是只DTO通过后一类中定义的成员将对象进行比较的顺序变量时加以考虑.可以配置此行为,如果您愿意,可以选择使用运行时类型:
归档时间: |
|
查看次数: |
1011 次 |
最近记录: |