簡體   English   中英

基類中的 NUnit TestCaseSource 帶有來自派生類的數據

[英]NUnit TestCaseSource in base class with data from derived class

我想知道是否有一種方法可以在基測試類中使用TestCaseSource並以通用方式從派生類中提供數據。

例如,如果我有以下基類:

public abstract class Base<T>
{
    protected static T[] Values;

    [TestCaseSource(nameof(Values))]
    public void MyTest(T[] values)
    {
        // Some test here with the values;
    }

}

以及以下派生類

[TestFixture]
public class Derived : Base<string>
{

    [OneTimeSetup]
    public void OneTimeSetup()
    {
        Values = new[] { "One", "Two" };
    }

    [TestCaseSource(nameof(Values))
    public void DerivedSpecificTest(T[] values)
    {
        // Some test here with the values;
    }

}

我認為我所做的不正確,因為當我運行派生類測試時,我在兩個測試中都會遇到此異常: Failed: System.Exception: The test case source could not be found.

但是,該示例應該了解我正在嘗試做的事情(如果我想要做的事情是可能的)。 基本上我想知道是否可以在基類中使用TestCaseSource和派生類提供的數據。

任何幫助表示贊賞,如果需要澄清,我可以回答問題。

我還應該提到,如果我將Values初始化為一個空的、長度為零的數組,則測試返回的結果是不確定的。 我認為這是因為在創建測試時數據發生了變化(NUnit 的某些行為?)。

如果我不使用TestCaseSource ,我可以讓測試運行,而只是使用屬性Test標記Test ,並將我的測試邏輯插入到每個數組值的循環中。 這並不理想,因為當測試失敗時,很難確切地看到是哪個輸入導致它失敗,因為每個輸入都沒有被分離出來。

這應該讓你開始,毫無疑問有一個更優雅的解決方案。

using System;
using NUnit.Framework;

namespace UnitTestProject1
{
    public class Base<T>
    {
        private static T[] Values;

        [TestCaseSource(nameof(Values))]
        public void MyTest(T value)
        {
            Console.WriteLine($"Base: {value}");
            // Some test here with the values;
        }
    }

    [TestFixture]
    public class Derived : Base<string>
    {
        private static string[] Values= new[] { "One", "Two" };

        [TestCaseSource(nameof(Values))]
        public void DerivedSpecificTest(string value)
        {
            // Some test here with the values;
            Console.WriteLine($"Derived: {value}");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM