سؤال

في 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؟

هل كانت مفيدة؟

المحلول

سوف أنظر إلى وثائق الاختبارات المعلمة في NUNIT 2.5 ومعرفة ما إذا كان يمكنك فعل شيء مثل ما تفعله هناك. لا أتذكر NUNIT وجود سمة قراءة CSV مدمجة لإجراء اختبارات محرك المعلمة. قد يكون هناك مكون إضافي للمجتمع في مكان ما.

أود أن أشير أيضًا إلى أنه إذا كنت تبحث فقط عن مكتبات إطار اختبار الوحدة غير MS لمساعدتك في الخروج ، فإن Xunit.net لديها هذه الوظيفة. ألق نظرة على هذا مدونة منشور من بن هول

نصائح أخرى

حصلت على اختبار البيانات المستند إلى CSV في Nunit العمل على النحو التالي:

استخدم ال قارئ CSV من مشروع الرمز, ، اختتمت بطريقة خاصة إرجاع ienumerable في فئة الاختبار الخاصة بك ، ثم الرجوع إلى ذلك مع سمة TestCasesource في حالات الاختبار الخاصة بك. قم بتضمين ملف CSV الخاص بك في مشروعك وقم بتعيين "انسخ دليل الإخراج" ل "نسخ دائما ".

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

فيما يلي مثال آخر يشبه إلى حد بعيد تيم أبيل لا يستخدم إطارًا لقارئ CSV وإظهار تفاصيل الاختبار. ملاحظة عند استخدام TestCaseAttribute ، يمكن حذف TestAttribute.

        [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:

10,200,210 20,190,210 30,180,210 40,170,210 50,160,210 60,150,210 70,140,210 80,130,210 90,120,210 100,110,210

ملاحظة: العمود الثالث هو مجموع العمودين الأولين وسيتم تأكيد ذلك في اختبار الوحدة.

نتائج:

results

ابحث أدناه عن بديل باستخدام كائنات testcaparata ووضع نوع إرجاع (وهو ما هو خارج الدورة إلزامية)

        [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 آلية لجعل بيانات الاختبار الخاصة بك من مصادر مختلفة. لكن هذا غير متوفر خارج الصندوق من Nunit.

أنا أؤيد استخدام فصل البيانات والرمز للاختبارات ذات الحجم الكبير. عندما أفصل بين كليهما ، فإن توقعاتي هي 1. قابلية قراءة بيانات الاختبار 2. يجب أن يكون من السهل تعديل بيانات الاختبار 3.

ال jsonsectionReader يوجد أدناه جميع الميزات التي أود الحصول عليها. الأداة قادرة على قراءة أقسام البيانات من ملفات JSON المدمجة. كما أنه يوفر آلية مريحة للغاية لإلغاء التسلسل.

https://www.nuget.org/packages/wondertools.jsonsectionReader/

ملاحظة: أنا المشرف على هذا المشروع ، وقد تم إنشاء هذا المشروع لأنني لم أجد أي أداة أخرى تحل هذه المشكلة إلى الحد الذي أردت.

أعتقد أن nunit equivilent هو وضع علامة على طريقة كطريقة إعداد ثم تحميل البيانات في حقل لاستخدامه في الاختبارات اللاحقة.

عليك أن ترميزها بنفسك ، أكثر أو أقل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top