Является ли это ошибкой при сравнении типа, допускающего значение NULL, с его базовым типом с помощью FluentAssertions?

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

Я использую последние версии 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не проходит. Я ожидал, что Cи здесь потерпит неудачу. И просто упомянул об этом, если я добавлю утверждения с помощью NUnit:

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

они проходят и терпят неудачу, как и ожидалось.

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

6
задан Julian 25 May 2012 в 11:42
поделиться