Pregunta

En MSTest que puede hacer algo como:

[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", 
            "testdata.csv", "testdata#csv", DataAccessMethod.Sequential)]
public void TestSomething()
{
    double column1 = Convert.ToDouble(TestContext.DataRow["column1"]);
    ...
    Assert.AreEqual(...);
}

¿Cuál es el código equivalente en NUnit 2.5?

¿Fue útil?

Solución

Me gustaría ver la documentación parametrizado pruebas en NUnit 2.5 y ver si se puede hacer algo como lo que está haciendo allí. No recuerdo NUnit tener un atributo incorporado CSV lectura para conducir pruebas con parámetros. Puede haber un plug-in de la comunidad en algún lugar sin embargo.

También se debe señalar que si usted está buscando para las bibliotecas marco no MS Prueba de la unidad de ayudarte, xUnit.net tiene esta funcionalidad. Echa un vistazo a este entrada de blog de Ben Hall

Otros consejos

Me quedó datos basados ??csv impulsado las pruebas de NUnit trabaja de la siguiente manera:

Utilice el csv lector de código de proyecto , envuelto en un método privado de regresar IEnumerable en su prueba clase y, a continuación, hacen referencia a esta con un atributo TestCaseSource en sus casos de prueba. Incluir el archivo CSV en su proyecto y conjunto " Copiar a directorio de salida " a " Copiar siempre" .

using System.Collections.Generic;
using System.IO;
using LumenWorks.Framework.IO.Csv;
using NUnit.Framework;

namespace mytests
{
    class MegaTests
    {
        [Test, TestCaseSource("GetTestData")]
        public void MyExample_Test(int data1, int data2, int expectedOutput)
        {
            var methodOutput = MethodUnderTest(data2, data1);
            Assert.AreEqual(expectedOutput, methodOutput, string.Format("Method failed for data1: {0}, data2: {1}", data1, data2));
        }

        private int MethodUnderTest(int data2, int data1)
        {
            return 42; //todo: real implementation
        }

        private IEnumerable<int[]> GetTestData()
        {
            using (var csv = new CsvReader(new StreamReader("test-data.csv"), true))
            {
                while (csv.ReadNextRecord())
                {
                    int data1 = int.Parse(csv[0]);
                    int data2 = int.Parse(csv[1]);
                    int expectedOutput = int.Parse(csv[2]);
                    yield return new[] { data1, data2, expectedOutput };
                }
            }
        }
    }
}

post original en: http: //timwise.blogspot .com / 2011/05 / datos de la prueba impulsada en nunit-con-csv.html

Este es otro ejemplo muy similar a Tim Abell embargo, no es el uso de un marco para el lector CSV y que muestra los detalles de la prueba. Nota cuando se utiliza el TestCaseAttribute la TestAttribute se puede omitir.

        [TestCaseSource("GetDataFromCSV")]
    public void TestDataFromCSV(int num1,int num2,int num3)
    {
        Assert.AreEqual(num1 + num2 ,num3);
    }

    private IEnumerable<int[]> GetDataFromCSV()
    {
        CsvReader reader = new CsvReader(path);
        while (reader.Next())
        {
            int column1 = int.Parse(reader[0]);
            int column2 = int.Parse(reader[1]);
            int column3 = int.Parse(reader[2]);
            yield return new int[] { column1, column2, column3 };
        }
    }


public class CsvReader : IDisposable
{
    private string path;
    private string[] currentData;
    private StreamReader reader;

    public CsvReader(string path)
    {
        if (!File.Exists(path)) throw new InvalidOperationException("path does not exist");
        this.path = path;
        Initialize();
    }

    private void Initialize()
    {
        FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
        reader = new StreamReader(stream);
    }

    public bool Next()
    {
        string current = null;
        if ((current = reader.ReadLine()) == null) return false;
        currentData = current.Split(',');
        return true;
    }

    public string this[int index]
    {
        get { return currentData[index]; }
    }


    public void Dispose()
    {
        reader.Close();
    }
}

CSV de datos:

10200210 20190210 30180210 40170210 50160210 60150210 70140210 80130210 90120210 100 110 210

Nota:. La tercera columna es la suma de las dos primeras columnas y esto se afirma en la prueba de la unidad

Resultados:

Resultados

Para una alternativa a continuación utilizando objetos TestCaseData y el establecimiento de un tipo de retorno (que fuera de curso es obligatorio)

        [TestCaseSource("GetDataFromCSV2")]
    public int TestDataFromCSV2(int num1, int num2)
    {
        return num1 + num2;
    }

    private IEnumerable GetDataFromCSV2()
    {
        CsvReader reader = new CsvReader(path);
        while (reader.Next())
        {
            int column1 = int.Parse(reader[0]);
            int column2 = int.Parse(reader[1]);
            int column3 = int.Parse(reader[2]);
            yield return new TestCaseData(column1, column2).Returns(column3);
        }
    }

MS prueba proporciona un mecanismo para tener sus datos de prueba a partir de diferentes fuentes. Sin embargo esto no está disponible fuera de la caja de NUnit.

Estoy a favor de la utilización de la separación de los datos y el código de pruebas que son de alguna considerable tamaño. Cuando separo tanto, mis expectativas son 1. La legibilidad de los datos de prueba 2. Los datos de prueba deben ser fáciles de modificar 3. Las pruebas unitarias deben ejecutarse cómodamente en el medio ambiente local y la creación

El JsonSectionReader continuación tiene todas las características que me gustaría tener. La herramienta es capaz de leer las secciones de datos de archivos JSON embebidos. También proporciona un mecanismo muy cómodo para deserializar.

https://www.nuget.org/packages/WonderTools.JsonSectionReader/

P.S. Soy el encargado de este proyecto, y este proyecto se creó porque no he encontrado ninguna otra herramienta que soluciona este problema en la medida en que quería.

Creo que el equivilent Nunit es marcar un método como un método de configuración y luego cargar los datos en un campo para ser utilizado en las pruebas posteriores.

Tienes que usted mismo código, más o menos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top