NUnit проверка всех значений массива (с допуском)
в NUnit я могу сделать следующее:
Assert.That(1.05,Is.EqualTo(1.0).Within(0.1));
Я также могу это сделать:
Assert.That(new[]{1.0,2.0,3.0},Is.EquivalentTo(new[]{3.0,2.0,1.0}));
теперь я хотел бы сделать что-то вдоль этих линий
Assert.That(new[]{1.05,2.05,3.05},
Is.EquivalentTo(new[]{3.0,2.0,1.0}).Within(0.1));
кроме Within
ключевое слово не поддерживается в этой ситуации. Есть ли обходной путь или другой подход, который позволил бы сделать это легко?
4 ответов
вы можете установить допуск по умолчанию для числа с плавающей запятой:
GlobalSettings.DefaultFloatingPointTolerance = 0.1;
Assert.That(new[] {1.05, 2.05, 3.05}, Is.EquivalentTo(new[] {3.0, 2.0, 1.0}));
вы можете сделать:
var actual = new[] {1.05, 2.05, 3.05};
var expected = new[] { 1, 2, 3 };
Assert.That(actual, Is.EqualTo(expected).Within(0.1));
, Is.EqualTo
семантика несколько отличается от Is.EquivalentTo
-EquivalentTo
игнорирует заказа ( {1, 2, 3}
эквивалентно, но не равно {2, 1, 3}
). Если вы хотите сохранить эту семантику, самым простым решением является сортировка массивов перед утверждением. Если вы собираетесь использовать эту конструкцию много, я бы предложил написать свое собственное ограничение для этого.конечно, вы можете использовать EqualTo
для проверки значений массива. Вот так:
/// <summary>
/// Validate the array is within a specified amount
/// </summary>
[Test]
public void ValidateArrayWithinValue()
{
var array1 = new double[] { 0.0023d, 0.011d, 0.743d };
var array2 = new double[] { 0.0033d, 0.012d, 0.742d };
Assert.That(array1, Is.EqualTo(array2).Within(0.00101d), "Array Failed Constaint!");
} // ValidateArrayWithinValue
вы пытались использовать CollectionAssert? Существует множество методов для проведения различного рода сравнений.