Я писал некоторые модульные тесты для библиотеки утилиты, когда я столкнулся с тестом, который я ожидал бы сбой, который фактически прошел. Проблема связана с сопоставлением двух переменных 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, или я что-то пропустил в отношении сравнения с нулевым значением?
Он находится в бета-версии 2.0 на http://fluentassertions.codeplex.com/releases/view/82423 –