3

Excelスプレッドシート、CSVファイル、データベースなどの外部データソースからTestCaseAttributeの値を取得することは可能ですか?つまり、テストケースごとに1行のデータを含む.csvファイルを用意し、そのデータを一度に1つずつNUnitに渡します。

これが私がこれを使用したい特定の状況です。私は現在、あるシステムから別のシステムにいくつかの機能をマージしています。これは、古いシステムから新しいシステムへのコピーアンドペーストプロセスにすぎません。残念ながら、移動するコードにはテストがないだけでなく、テスト可能な方法で記述されていません(つまり、データベースや他のコードと緊密に結合されています)。コードをテスト可能にするために時間をかけることは、実際には不可能です。大きな混乱です。私はスケジュールが厳しく、機能全体が今後6〜9か月でゼロから書き直される予定です。ただし、コードの周りにテストを行わないという考えは好きではないので、WebDriverを使用してUIを介してページをテストする簡単なSeleniumテストをいくつか作成します。これは理想的ではありませんが、何もないよりはましです。

問題のページには、約10個の入力値と計算の完了後にアサートする必要のある約20個の値があり、テストしたい値の約30個の有効な組み合わせがあります。私はすでにスプレッドシートにデータを持っているので、Visual Studioですべてを再入力するのではなく、単にデータを引き出すことができれば便利です。

4

2 に答える 2

6

NUnitのTestCaseSource属性を使用して、ようやく目的を達成することができました。コードは少し醜いように見えますが、機能します。

これは、.csvファイルからデータをプルインしてテストメソッドに渡す例です。テストは、2つのintを取り、それらを合計して合計を返す単純な計算機のAddメソッドを対象としています。

ファイルからテストデータをロードするクラス。

public class TestData
{
    public int number1 { get; set; }
    public int number2 { get; set; }
    public int sum { get; set; }

    public static IEnumerable TestCases
    {
        get
        {
            string inputLine;
            using(FileStream inputStream = 
                new FileStream("C:\\Code\\TestData\\TestData.csv", 
                    FileMode.Open, 
                    FileAccess.Read))
            {
                StreamReader streamReader = new StreamReader(inputStream);

                while((inputLine = streamReader.ReadLine()) != null)
                {
                    var data = inputLine.Split(',');
                    yield return new TestData { 
                        number1 = Convert.ToInt32(data[0])
                        ,number2 = Convert.ToInt32(data[1])
                        ,sum = Convert.ToInt32(data[2]) 
                    };
                }

                streamReader.Close();
                inputStream.Close();
            }
        }
    }
}

実際のテストでのクラス:

[TestFixture]
public class CalculatorTests
{
    [Test]
    [TestCaseSource(typeof(TestData), "TestCases")]
    public void AddTwoNumbers(TestData data)
    {
        int sum = Calculator.Add(data.number1, data.number2);
        sum.ShouldEqual(data.sum);
    }
}

TestData.csvの内容

4,4,8
15,20,35
8,8,16
5,5,10
42,13,55

TestDataクラスのgetプロパティを変更して、必要なデータソース(データベース、Webサービス、Excelなど)からデータをプルするのはかなり簡単です。

于 2010-07-22T17:01:31.750 に答える
0

いつでもExcelまたは任意のスプレッドシートツールでcsvファイルを開いてから、入力/出力値をテストケース構文に連結する新しい列を追加できます。

次のようなもの:= CONCATENATE( "[TestCase("、A1、 "、"、B1、 "、"、C1、 "、"、D1、 "、"、E1、 ")]")

次に、列をコピーしてコードに貼り付けます。

于 2010-06-07T18:51:19.343 に答える