Visual Studio に C# テスト プロジェクトがあります。このプロジェクトの出力パスは、ソリューション レベルの bin ディレクトリである "..\bin\" に設定されます。私のプロジェクトには次のようなテストがあります。
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClass
{
private TestContext context { get; set; }
[ClassInitialize]
public static void ClassInitialize(TestContext c)
{
//generate some test data xml
XDocument.Save("|DataDirectory|\\TestProjectData\\data.xml");
}
[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\TestProjectData\\data.xml", "testcase", DataAccessMethod.Random)]
public void TestMethod1()
{
Console.WriteLine("test case run");
}
}
このテストを正常に実行し、データソースとしてテスト結果を受け取りました。行番号ごとにテスト結果が表示されます。ただし、テスト ケースを再度正常に実行できませんでした。エラーが発生し始めました:
Result Message: The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: Object reference not set to an instance of an object.
テストをデバッグしようとすると、TestMethod と ClassInitialize にブレークポイントを設定します。ただし、ClassInitialize メソッドはもう呼び出されていないようです。ClassInitialize メソッドがオプションでのみ呼び出される原因は何ですか? 私の理解では、テストメソッドが呼び出される前に常に呼び出され、失敗し始める前にこの作業が成功したこともわかりました。
これは一度成功したので、最初の成功した実行中に作成されたファイルが削除されることを期待して、再構築、ソリューションのクリーニング、VSの再起動、コンピューターの再起動などを試しました。ただし、テストは 1 回実行しただけで引き続き失敗します。
私は次のような質問を見てきました
- testmethod データが読み込まれる前に ClassInitialize を強制的に実行する
- ClassInitialize で生成されたデータ ドリブン テスト: Visual Studio 2012 では機能しなくなりました
問題をグーグルで検索すると、このトピックに関する共通のスレッドがあります。通常、提案は常にMSTestHacksの使用を中心に展開されます。ただし、この問題の具体的な原因は何かを知りたいです。サードパーティのライブラリを必要とせずにこれを機能させる app.config、ビジュアル スタジオ設定などはありますか。これがライブラリで機能するという事実は、この問題に対する答えがあることを示しています。おそらく、グーグルで見つけるのは簡単ではありません。