2012-05-25 12 views
6

Ich schrieb einige Komponententests für eine Dienstprogrammbibliothek, als ich auf einen Test stieß, von dem ich annehmen würde, dass er fehlschlug. Das Problem bezieht sich auf den Vergleich zweier float Variablen, verglichen mit einer float? und einer float Variablen.Ist dies ein Fehler beim Vergleich eines Nullable-Typs mit dem zugrunde liegenden Typ unter Verwendung von FluentAssertions?

ich die neuesten Versionen von NUnit mit (2.6.0.12051) und FluentAssertions (1.7.1), und unten ist ein kleiner Code snipped illustriert das Problem:

using FluentAssertions; 
using FluentAssertions.Assertions; 
using NUnit.Framework; 

namespace CommonUtilities.UnitTests 
{ 
    [TestFixture] 
    public class FluentAssertionsFloatAssertionTest 
    { 
     [Test] 
     public void TestFloatEquality() 
     { 
      float expected = 3.14f; 
      float notExpected = 1.0f; 
      float actual = 3.14f; 

      actual.Should().BeApproximately(expected, 0.1f); 
      actual.Should().BeApproximately(notExpected, 0.1f); // A: Correctly fails (Expected value 3,14 to approximate 1 +/- 0,1, but it differed by 2,14.) 
      actual.Should().BeInRange(expected, expected); 
      actual.Should().BeInRange(notExpected, notExpected); // B: Correctly fails (Expected value 3,14 to be between 1 and 1, but it was not.) 
     } 

     [Test] 
     public void TestNullableFloatEquality() 
     { 
      float expected = 3.14f; 
      float notExpected = 1.0f; 
      float? actual = 3.14f; 

      actual.Should().BeApproximately(expected, 0.1f); 
      actual.Should().BeApproximately(notExpected, 0.1f); // C: Passes (I expected it to fail!) 
      actual.Should().BeInRange(expected, expected); 
      actual.Should().BeInRange(notExpected, notExpected); // D: Correctly fails (Expected value 3,14 to be between 1 and 1, but it was not.) 
     } 
    } 
} 

Wie Sie sehen können, Meine Kommentare, in TestFloatEquality() beide A und B schlägt fehl richtig (nur den ersten fehlgeschlagenen Test auskommentieren, um zum zweiten zu kommen).

In TestNullableFloatEquality() jedoch D Pässe aber C ausfällt. Ich hätte erwartet, dass C auch hier fehlschlägt. Und hat es erwähnt, wenn ich Behauptungen hinzufügen mit NUnit:

Assert.AreEqual(expected, actual); // Passes 
Assert.AreEqual(notExpected, actual); // Fails (Expected: 1.0f But was: 3.1400001f) 

jene Pässe und nicht wie erwartet.

Also, auf die Frage: Ist das ein Bug in FluentAssertions, oder fehle ich etwas in Bezug auf NULL Vergleich?

Antwort

4

Es war ein Fehler. Ich habe das sowohl im Release-Zweig 1.7.x als auch im Stamm behoben. Die Entwicklung auf der neuen Version 2.0.0 ist noch nicht abgeschlossen, so dass wir uns entscheiden könnten, eine Version 1.7.2 zu veröffentlichen.

Den genauen Status finden Sie unter http://fluentassertions.codeplex.com/workitem/12199.

+0

Es ist in der 2.0 Beta-Version unter http://fluentassertions.codeplex.com/releases/view/82423 –