Question

Dans MSTest vous pouvez faire quelque chose comme:

[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(...);
}

Quel est le code équivalent à 2,5 NUnit?

Était-ce utile?

La solution

Je regardais le paramétrés documentation NUnit 2.5 voir si vous pouvez faire quelque chose comme ce que vous faites là. Je ne me souviens pas NUnit avoir un attribut de lecture CSV intégré pour conduire des tests paramétrées. Il peut y avoir un plug-in quelque part si la communauté.

Je tiens également à souligner que si vous êtes à la recherche de cadre de tests unitaires non-MS bibliothèques pour vous aider, xUnit.net cette fonctionnalité ne. Consultez cette blog de Ben salle

Autres conseils

Je me suis données sur csv tests orientés dans le travail NUnit comme suit:

Utilisez le lecteur csv du projet de code , enveloppé dans une méthode privée IEnumerable retour dans votre test classe, puis référence à ce avec un attribut TestCaseSource sur vos cas de test. Inclure votre fichier csv dans votre projet et ensemble " Copier Output Directory " à " Toujours copier" .

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 };
                }
            }
        }
    }
}

message original à: http: //timwise.blogspot .com / 2011/05 / données axée sur des essais en nunit-avec-csv.html

Voici un autre exemple très similaire à Tim Abell cependant de ne pas utiliser un cadre pour le lecteur CSV et montrant les détails du test. Remarque lorsque vous utilisez le TestCaseAttribute le TestAttribute peut être omis.

        [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 données:

10200210 20190210 30180210 40170210 50160210 60150210 70140210 80130210 90120210 100110210

Note:. La 3ème colonne est une somme des deux premières colonnes et ce sera affirmé dans le test unitaire

Résultats:

Résultats

Découvrez ci-dessous une alternative à l'aide d'objets TestCaseData et la fixation d'un type de retour (qui hors cours est obligatoire)

        [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 test fournit un mécanisme pour vos données de test provenant de différentes sources. Toutefois, ce n'est pas disponible hors de la boîte de NUnit.

Je suis en faveur de l'utilisation séparant les données et le code pour les tests qui sont d'une taille considérable. Quand je sépare les deux, mes attentes sont 1. Lisibilité des données d'essai 2. Les données d'essai doivent être faciles à modifier 3. Les tests unitaires devraient fonctionner confortablement dans un environnement local et la construction

Le JsonSectionReader ci-dessous présente toutes les caractéristiques que je voudrais avoir. L'outil est capable de lire des sections de données à partir de fichiers JSON intégrés. Il fournit également un mécanisme très confortable à deserialize.

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

P.S. Je suis le responsable de ce projet, et ce projet a été créé parce que je ne trouve pas un autre outil qui permet de résoudre ce problème dans la mesure où je voulais.

Je pense que le equivilent Nunit est de marquer une méthode comme une méthode de configuration puis charger les données dans un champ à utiliser lors des essais ultérieurs.

Vous avez le code vous-même, plus ou moins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top