2011-07-15 10 views
8

En NUnit soy capaz de hacer lo siguiente:NUnit la comprobación de todos los valores de una matriz (con tolerancia)

Assert.That(1.05,Is.EqualTo(1.0).Within(0.1)); 

También soy capaz de hacer eso:

Assert.That(new[]{1.0,2.0,3.0},Is.EquivalentTo(new[]{3.0,2.0,1.0})); 

Ahora me gustaría hacer algo a lo largo de estas líneas

Assert.That(new[]{1.05,2.05,3.05}, 
    Is.EquivalentTo(new[]{3.0,2.0,1.0}).Within(0.1)); 

Excepto la palabra clave Within no se admite en esa situación. ¿Hay alguna solución u otro enfoque que permita hacer eso fácilmente?

Respuesta

10

Es posible ajustar la tolerancia predeterminada de puntos flotantes:

GlobalSettings.DefaultFloatingPointTolerance = 0.1; 
Assert.That(new[] {1.05, 2.05, 3.05}, Is.EquivalentTo(new[] {3.0, 2.0, 1.0})); 
+0

Eso es lo que estaba buscando. Sería incluso mejor si fuera local en una sola prueba, pero es lo suficientemente bueno por ahora. Gracias – Benoittr

5

que puede hacer:

var actual = new[] {1.05, 2.05, 3.05}; 
var expected = new[] { 1, 2, 3 }; 
Assert.That(actual, Is.EqualTo(expected).Within(0.1)); 

Sin embargo, la semántica Is.EqualTo es algo diferente de Is.EquivalentTo - EquivalentTo ignora orden ({1, 2, 3} es equivalente, pero no igual a {2, 1, 3}). Si desea preservar esta semántica, la solución más simple es ordenar matrices antes de la aserción. Si vas a utilizar mucho esta construcción, te sugiero que escribas tu propia restricción para eso.

1

Claro, puede usar EqualTo para verificar los valores de la matriz. De esta manera:

/// <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 
+1

Creo que a Benoittr le gustaría preservar la semántica de Is.EquivalentTo. Su prueba no ignora el orden de los elementos en las matrices. – maciejkow

0

Se ha intentado utilizar CollectionAssert? Hay muchos métodos para hacer diferentes tipos de comparación.

Cuestiones relacionadas