2012-05-25 3 views
6

Я писал некоторые модульные тесты для библиотеки утилиты, когда я столкнулся с тестом, который я ожидал бы сбой, который фактически прошел. Проблема связана с сопоставлением двух переменных float, по сравнению с одной float? и одной переменной float.Является ли это ошибкой при сравнении типа nullable с его базовым типом с использованием FluentAssertions?

Я использую последние версии как NUnit (2.6.0.12051) и FluentAssertions (1.7.1), а ниже небольшой код пропущен, иллюстрирующий вопрос:

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

Как вы можете видеть из мои комментарии, в TestFloatEquality() и A и B не удалось (просто закомментируйте первый провал, чтобы перейти ко второму).

В TestNullableFloatEquality() однако, D проходит, но С терпит неудачу. Я бы ожидал, что C потерпит неудачу здесь. И только уже упоминали, если добавить утверждения с помощью NUnit:

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

эти пропуска и не как ожидалось.

Итак, на вопрос: Является ли это ошибкой в ​​FluentAssertions, или я что-то пропустил в отношении сравнения с нулевым значением?

ответ

4

Это была ошибка. Я исправил это как в ветви релиза 1.7.x, так и в багажнике. Разработка нового 2.0.0 все еще продолжается, поэтому мы можем решить сделать выпуск 1.7.2.

См. http://fluentassertions.codeplex.com/workitem/12199 для получения точного статуса.

+0

Он находится в бета-версии 2.0 на http://fluentassertions.codeplex.com/releases/view/82423 –