gpt4 book ai didi

c# - 如果一个属性可为空,则比较对象时 FluentAssertions 会失败

转载 作者:行者123 更新时间:2023-12-02 21:44:49 32 4
gpt4 key购买 nike

场景:我有一个具有可为 null 属性的对象,当我运行测试下的方法时,该对象将被更新。在预期对象中,我没有指定它,因为我想单独验证该值。这是一个简单的测试演示

using System;
using FluentAssertions;
using NUnit.Framework;

namespace FluentAssertionsNullableFailure
{
public class SimpleWithNullable
{
public Int64? nullableIntegerProperty
{ get; set; }

public string strProperty
{ get; set; }
}

[TestFixture]
public class Demo
{
public SimpleWithNullable actual = new SimpleWithNullable { nullableIntegerProperty = 1, strProperty = "I haz a string!" };
public SimpleWithNullable expected = new SimpleWithNullable { strProperty = "I haz a string!" };

[Test]
public void NullableTest ()
{
actual.ShouldBeEquivalentTo (
expected,
opt => opt.Using<Int64?> ( c => c.Subject.Should ().BeInRange ( 0, 10 ) ).WhenTypeIs<Int64?> ()
);
}
}
}

但是,此操作失败并显示以下消息:

Test Name:  NullableTest
Test FullName: FluentAssertionsNullableFailure.Demo.NullableTest
Test Source: c:\Users\ebelew\Documents\Visual Studio 2012\Projects\FluentAssertionsNullableFailure\FluentAssertionsNullableFailure\Demo.cs : line 25
Test Outcome: Failed
Test Duration: 0:00:00.271

Result Message:
Expected property nullableIntegerProperty to be <null>, but found 1.

With configuration:
- Select all declared properties
- Match property by name (or throw)
- Invoke Action<Nullable`1> when info.RuntimeType.IsSameOrInherits(System.Nullable`1[System.Int64])
- Invoke Action<DateTime> when info.RuntimeType.IsSameOrInherits(System.DateTime)
- Invoke Action<String> when info.RuntimeType.IsSameOrInherits(System.String)
Result StackTrace:
at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Execution\LateBoundTestFramework.cs:line 25
at FluentAssertions.Execution.CollectingAssertionStrategy.ThrowIfAny(IDictionary`2 context) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Execution\CollectingAssertionStrategy.cs:line 57
at FluentAssertions.Execution.AssertionScope.Dispose() in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Execution\AssertionScope.cs:line 267
at FluentAssertions.Equivalency.EquivalencyValidator.AssertEquality(EquivalencyValidationContext context) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Equivalency\EquivalencyValidator.cs:line 55
at FluentAssertions.AssertionExtensions.ShouldBeEquivalentTo[T](T subject, Object expectation, Func`2 config, String reason, Object[] reasonArgs) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\AssertionExtensions.cs:line 497
at FluentAssertionsNullableFailure.Demo.NullableTest() in c:\Users\ebelew\Documents\Visual Studio 2012\Projects\FluentAssertionsNullableFailure\FluentAssertionsNullableFailure\Demo.cs:line 25

如何使用选项上下文执行此操作,而不是将其拆分为两个或多个断言。 (一个断言用于公共(public)属性,每个断言用于具有范围或所需值而不是严格等效的项目)

注意:对于预期对象中没有显式值的引用类型,这也会失败。

Note+:我尝试过 ExclusionMissingProperties(),它不会改变错误。

最佳答案

你发现了一个我没有预见到的场景。我将在版本 2.2 中修复它,但您可以通过 https://github.com/dennisdoomen/fluentassertions/issues/33 跟踪我的进度

关于c# - 如果一个属性可为空,则比较对象时 FluentAssertions 会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19714080/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com