2012-05-25 20 views
6

Estaba escribiendo algunas pruebas unitarias para una biblioteca de utilidades cuando encontré una prueba que esperaría fallar que realmente pasó. El problema está relacionado con la comparación de dos variables float, en comparación con la comparación de una float? y una variable float.¿Es esto un error al comparar un tipo anulable con su tipo subyacente utilizando FluentAssertions?

estoy usando las últimas versiones de ambos NUnit (2.6.0.12051) y FluentAssertions (1.7.1), y por debajo se cortó un pequeño código que ilustra el tema:

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.) 
     } 
    } 
} 

Como se puede ver en mis comentarios, en TestFloatEquality() ambos A y B fallan correctamente (basta con comentar la primera prueba que falla para llegar a la segunda).

En TestNullableFloatEquality() sin embargo, D pases pero C falla. Hubiera esperado que C fallara aquí también. Y al igual que ha mencionado, si añado afirmaciones utilizando NUnit:

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

los de aprobación y rechazo como se esperaba.

Por lo tanto, a la pregunta: ¿Esto es un error en FluentAssertions, o me falta algo con respecto a la comparación de nulos?

Respuesta

4

Era un error. Lo arreglé tanto en la rama de versión 1.7.x como en la troncal. El desarrollo en el nuevo 2.0.0 todavía está en curso, por lo que podríamos decidir hacer una versión 1.7.2 después de todo.

Ver http://fluentassertions.codeplex.com/workitem/12199 para el estado exacto.

+0

Está en la versión 2.0 beta en http://fluentassertions.codeplex.com/releases/view/82423 –

Cuestiones relacionadas