Как вы используете `приблизительно` со значением, которое изменяется на каждой итерации цикла?

#c# #fluent-assertions

#c# #свободно-утверждения

Вопрос:

Описание

  • Я перебираю 2 списка
  • Я хочу сравнить 2 значения в каждой точке списка
  • Я хочу, чтобы значения были в пределах 0,1% друг от друга

Завершите минимальный пример, воспроизводящий проблему

 var sheetRows = new List<float> { -24.0, 0.1, 10};
var loads= new List<float> { -24.0, 0.1, 10.05};
foreach ((var xl, var db) in sheetRows.Zip(loads, (n, w) => (n, w)))
{
   xl.Should().BeApproximately(db, db*0.001f);
}
  

Ожидаемое поведение:

Для передачи

Фактическое поведение:

 Expected xl to approximate -24F  /- -0.024F, but -24F differed by 0F.
   at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.NumericAssertionsExtensions.FailIfDifferenceOutsidePrecision[T](Boolean differenceWithinPrecision, NumericAssertions`1 parent, T expectedValue, T precision, T actualDifference, String because, Object[] becauseArgs)
   at FluentAssertions.NumericAssertionsExtensions.BeApproximately(NumericAssertions`1 parent, Single expectedValue, Single precision, String because, Object[] becauseArgs)
   at RoutingTests.UnitResponseModuleTests.U010_CheckTranslationAsync(Int64 sId, String sheetName, Int32 expected, Int32 excelRowCount) in C:UserssogscxsourcereposFloatComputeTestRoutingTestsUnitResponseModuleTests.cs:line 480
   at NUnit.Framework.Internal.TaskAwaitAdapter.GenericAdapter`1.BlockUntilCompleted()
  

Версии

  • Какую версию Fluent Assertions вы используете?

Последние

  • Который .Вы ориентируетесь на время выполнения и версию NET? Например, .NET framework 4.6.1 или .NET Core 2.1.

.NET Core 3.1 работает под управлением NUnit

Комментарии:

1. @DTul, я знаю, что это работает. Я хочу отклонение для каждого значения. т. Е. значения с плавающей запятой имеют только 6-8 цифр, поэтому, если это 10000 и еще 0,001, то 10% отличаются для каждого!

Ответ №1:

Вы передаете отрицательное значение для точности. Скорее всего, это не сработает.

Комментарии:

1. Спасибо. Вот и все.. Показывает, что в Fluent-assertions требуется проверка аргументов