2

Microsoft.VisualStudio.TestTools.UnitTestingディスク上のテキスト ファイルに保存されている多数のテスト ケースを反復処理して、 を使用してテストケースを作成しました。テスト ケースの 1 つが原因で「単体テスト」が失敗するとすぐに、私が使用している Assert メソッド (AreEqualまたは) は、失敗したケースの詳細を含む をFail返します。ErrorMessageこれは素晴らしいことですが、失敗したケースが 1 つでもコードですべてのテスト ケースを実行し続けて、失敗したすべてのケースの詳細を確認できるようにしたいと考えています。

私の調査から、これは大規模なデータ セットの単体テストの定義に従って、必ずしも単体テストではないことがわかりました。Microsoft.VisualStudio.TestTools.UnitTestingそのため、単体テスト フレームワークに関連するものだけでなく、この問題を解決する方法に関する別の提案も受け付けています。

4

2 に答える 2

3

Data Driven Testという概念があります。私は NUnit で使用しましたが、Visual Studio の単体テストでも使用する方法があります。

これにより、データセット全体に対して 1 つのテストが作成されるのではなく、データ行ごとに 1 つのテストが作成されます。これにより、データセット全体のテストが実行され、失敗しても次のデータ項目に進みます。最終結果では、各テスト ケースを個別に処理することで、失敗と成功が強調されます。

于 2013-03-18T01:15:50.017 に答える
3

私が過去に行ったことは、データ ソースからテストを作成するための通常、テストの CSV ファイル。(再) 生成するには、TT ファイルを開いて保存し、再生成するか、VS ツールを使用するだけです。

これには、条件ごとに 1 つのテストしかないという利点があり、生成されたものであっても、簡単に再現可能なテストが得られます。結局のところ、コードは C# であるため、失敗したテストを非常に簡単にデバッグすることもできます。

たとえば、このコンテンツで *.tt を作成し、いくつかのデータを含む CSV ファイルを作成します。

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".generated.cs" #>
<#
    var testCases =
        File.ReadAllLines(Path.Combine(Host.TemplateFile, @"Cases.csv"))
        .Skip(1)  //Headers
        .Select(line => line.Split(','))
        .Select(
            values =>
                new
                {
                    TestName = values[0],
                    Expected = values[1],
                    Actual = values[2],
                    //More Stuff from values[n]
                });
#>
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace DaveShaw
{
    [TestClass]
    public class GeneratedTests
    {
<#
    foreach (var testCase in testCases)
    {
#>
        [TestMethod]
        public void Generated_<#= testCase.Name #>()
        {
            //Put your Arrange & Act code here
            Assert.AreEqual(
                expected: <#= testCase.Expected #>
                actual: <#= testCase.Expected #>);
        }
<#
    }
#>
    }
}

保存すると、すべてのテストが含まれる *.generated.cs (* は *.tt と同じ) が作成されます。

于 2013-03-18T01:17:29.190 に答える