9

csv ファイルや xml ファイル内のデータなど、ファイル内のデータを使用して単体テストを実行できることを知っています。

例えば:

[TestMethod]
[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.CSV", 
    "Data.csv", 
    "Data#csv", 
    DataAccessMethod.Sequential)]
public void TestData() {}

ファイルを使用する代わりに、既にメモリ内にあるデータ構造を使用してテストを実行できる方法があるかどうかを知りたいです。

何かのようなもの:

// this structure has the data to use in the unit test
var DataList = new List<string>();

[TestMethod]
[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.IEnumerable",
    "DataList", 
    "DataList", 
    DataAccessMethod.Sequential)]
public void TestData() {}
4

6 に答える 6

3

メモリ内にある場合は、DataSource を使用せず、代わりに T4 テンプレートを使用して単体テストを自動生成することをお勧めします。この方法では、テストを 1 回だけ記述しますが、テスト実行の結果には、テストした各入力のエントリが表示されます。この .tt ファイルをテスト プロジェクトに追加します。

<#@ template debug="false" hostspecific="true" language="C#v3.5" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Data.dll" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
<#@ output extension=".cs" #>
<#
        List<string> DataList = AccessInMemoryData();
#>
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject1
{
[TestClass]
public class UnitTest1
{
    <# foreach (string currentTestString in DataList) { #>
    [TestMethod]
    public void TestingString_<#= currentTestString #>
    {
    string currentTestString = "<#= currentTestString #>";
    // TODO: Put your standard test code here which will use the string you created above
    }
    <# } #>
}
}
于 2011-11-10T00:46:39.277 に答える
1

属性でそれを行うことはできないと思いますが[DataSource]、ほぼ同じことを手動で行うことができます。

[AssemblyInitialize]またはで装飾されたメソッドでデータをロードします[ClassInitialize]。次に、データをループするようにテストを書き直します。残念ながら、この方法では、テスト実行ごとに個別の結果が得られるのではなく、単一のテストになってしまいます。

于 2011-11-10T00:14:07.563 に答える
1

NuGet 経由でMSTestHacksを使用して、IEnumerable からデータをフィードできます。この回答を参照してください。

于 2016-01-29T13:12:06.327 に答える
1

簡単な解決策はこれです...

private void TestData(IEnumerable what ) { ... your test method ... }

[TestMethod]
public void TestDataInMemory() { List<T> mylist = ...; this.TestData(mylist); }

[TestMethod]
[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.CSV", 
    "Data.csv", 
    "Data#csv", 
    DataAccessMethod.Sequential)]
public void TestData() { this.TestData(testContextInstance ...) }

このようにして、ファイルからロードされたデータとメモリからロードされたデータの両方でテスト メソッドを使用できます。

于 2011-11-10T00:12:31.743 に答える
1

同様の質問答えましたが、以前に使用した解決策は、メモリ内データから単純な CSV ファイルを生成することです。

于 2012-03-28T09:59:21.317 に答える
0

Gallio Ambienceはこの問題を解決するはずだったと思います。現在、プロジェクトの状態がどのようなものかはわかりません。

于 2011-11-10T01:04:40.220 に答える