代码之家  ›  专栏  ›  技术社区  ›  Nobody

努尼特的数据驱动测试?

  •  12
  • Nobody  · 技术社区  · 14 年前

    在MSTEST中,您可以执行以下操作:

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

    nunit 2.5中的等效代码是什么?

    5 回复  |  直到 6 年前
        2
  •  12
  •   Tim Abell    14 年前

    csv reader from code project

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

    http://timwise.blogspot.com/2011/05/data-driven-test-in-nunit-with-csv.html

        3
  •  3
  •   Thulani Chivandikwa    11 年前
            [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();
        }
    }
    

    results

            [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);
            }
        }
    
        5
  •  -2
  •   keithwill    14 年前