0
場景:我有一個具有可空屬性的對象,當我運行被測方法時它將被更新。在預期的對象中,我沒有指定它,因爲我想單獨驗證該值。下面是一個簡單的試驗示範FluentAssertions在比較對象時會失敗,如果一個屬性可以爲空
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
我怎麼能做到這一點與期權方面,而不是分裂成兩個或更多的斷言。 (一個主張爲共同屬性,一個爲範圍或期望值而不是嚴格等值的項目)
注意:對於expected
對象,沒有明確值的引用類型也會失敗。
注意:我試過ExcludingMissingProperties(),它不會改變錯誤。
跟蹤我的進度問題已修復。請查看GitHub上的問題了解更多細節。 –