web-dev-qa-db-ja.com

MSTest:テストが読み込まれていないか、選択したテストが無効になっているため、テストは実行されません

私は次の構造を持つc#ソリューションを持っています:

mySolution
  myProject
  myProject.MSTests
    References
      Microsoft.VisualStudio.QualityTools.UnitTestFramework
    sutMSTests.cs

sutMSTests.cs:

[TestClass()] 
public class sutMSTests
{
    [TestMethod]
    public void MyTest0()
    {
        Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(4, 2 + 2);
    } 
}

テスト、実行、ソリューション内のすべてのテストを介してテストを実行しようとすると、VS2008ステータス行に次のメッセージが表示されます。

テストがロードされていないか、選択したテストが無効になっているため、テストは実行されません。

テスト、Windows、テストビューにはテストが表示されません。

注:Microsoftのウィザードを使用する代わりに、テストを手動で作成しました(xUnit.netで機能します)。

手動で作成したMSTestセットアップを、ウィザードを使用して生成した別のテストセットアップと比較しましたthey are十分に似ています。

質問:上記のエラーメッセージの最も可能性の高い原因は何ですか?

Edit 2010-02-25:詳細情報:
Solution Itemsフォルダーを右クリックし、[追加]、[新しいプロジェクト]を選択して、Test Projects、Test Documents :: Visual Studio Test Project templateと入力します。

新しいプロジェクトのデフォルトでは、テスト「TestMethod1」が検出され、合格しません。
ただし、テストが表示されなかったため、テストメソッドをコピーしてデフォルトのテストテストプロジェクト「TestProject1」に貼り付けました。

テストは「TestProject」で検出されましたが、元の場所では検出されませんでした。

「TestProject1」のファイル、構成、および設定を、自分で作成したテストプロジェクトと厳密に比較しました。

この時点で、私はguessingであり、Visual Studio Test Projectテンプレートによって簡単に検出できない設定が行われます。

imo、Visual Studio Test Projectテンプレートを使用してテストプロジェクトを作成するのと同じくらい簡単に、手動でテストプロジェクトを作成する必要があります。

注:Visual Studio Test Projectテンプレートの使用に反対しているとは言いません。私にとって、カーテンの向こう側にあるものを理解するのが好きです。

62
gerryLowry

グーグルのためのもう一つ-これは私の問題であることが判明し、それは私を恥ずかしく思い切っている。テストプロジェクトが、使用しているソリューション構成に組み込まれるように設定されていることを確認してください。テストアセンブリがビルドされていない場合、VSは存在しないアセンブリでテストを見つけることができず、しばらくの間壁に頭を叩きます:-)

75
Dan F

おそらく少し遅いかもしれませんが、この質問はうまくグーグルアップし、将来のグーグルのためにパン粉を投げると思いました。

ブライアンクックは、ブログの投稿でProjectTypeGuidsを確認することを提案しています MSテストプロジェクトの手動作成 。どうやら必要な魔法のGUIDは{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} c#および{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} VBの場合。詳細については、彼のブログ投稿を参照してください。

ブログの投稿が消えた場合、csprojファイルのメインプロパティグループに次の要素を追加する必要があります。

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
45
Dan F

Google社員向けの別のアイデア。私の問題は、無視されたテストを再度実行しようとしていました。無視ラベルを削除すると、同じMSエラーメッセージが表示されます。テストを自動的に再度有効にしません。この記事では、最後の手順を説明します。 http://richallen.blogspot.com/2008/05/ms-test-re-enabling-ignored-tests.html

10
Joy Petko

Visual Studioが正常に機能していれば、修正は必要ではありませんが、簡単です。

他の人が貢献したこと、特に この記事 を要約すると、最終的には私にとってうまくいったものです:

  • 構成マネージャーを使用して、使用している構成およびプラットフォームをビルドするテストプロジェクトが選択されていることを確認します(例:configuration = Debugおよびplatform = x86)
  • メソッドが[TestClass]に属し、両方とも[TestMethod]とマークされ、属性[Ignore]を使用していないことを確認してください
  • テストビューを使用して、テストを見つけます。 Test View
  • [プロパティ]ウィンドウ(F4)、テストが有効になっていることを確認してください Enabled
9
Gustavo Mori

元のポスターがこれを行いましたが、これを行わなかった後にここに到着しました。

[TestClass]は上部で宣言され、スコープ内でパブリックです:

namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {
4
Dracorat

私はこれを手動で実行しました:

次のコードを使用して、新しいC#クラスライブラリプロジェクトを作成しました。

_namespace SO_Answer
{
    public class Class1
    {
        public void Test()
        {
            var k = "Hello";
        }
    }
}
_

プロジェクトを保存し、「ファイル」->「追加」->「新規プロジェクト」に進み、「テストプロジェクト」を選択しました。 VSが単体テストプロジェクトを作成した後、先ほど作成したクラスライブラリプロジェクトへの参照を追加しました。

私のテストでは、このコードがあります:

_namespace Unit_Test
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext { get; set; }

        #region Additional test attributes

        // You can use the following additional attributes as you write your tests:
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        #endregion

        /// <summary>
        /// The test method 1.
        /// </summary>
        [TestMethod]
        public void TestMethod1()
        {
            var f = new Class1();

        }
    }
}
_

追加したコードは、usingステートメントとvar f = new Class1();ステートメントだけです。 MSTestランナーを見ると、_TestMethod1_が表示されています。

あなたのユニットテストが取り上げられない理由は考えられません。これがあったのは、MSTestランナーを使用してNUnitテストを誤って表示しようとしたためです。ゼロから始めてみてください。

2
Jason Evans

私は同じメッセージを受け取っていましたが、ネットワークドライブでユニットテストプロジェクトを行っていたことがわかりました。ローカルに移動すると、問題なく動作しました。このエラーが発生した場合は、試してみてください。ジョン

2
John Vetter

これは別の理由かもしれません。ソリューションが64ビットで実行されているかどうかを確認します。その場合は、x86に変更します。

2
T Jose

Visual Studioでこの問題が発生した場合、テストプロジェクトを作成する必要があります。 1.ツールバーでテストを選択し、「新規テスト」を選択します。プロジェクトを作成し、この時点でテストメソッドを作成します。この時点で動作するはずです。

1
Marvin Bland

後世:テストを静的としてマークすると、テストリストに静かに表示されないことがわかりました。どうやらそれは許可されていません。

1
Jac

他の答えはどれも私にとってはうまくいきませんでした。出力ウィンドウに次のメッセージが表示され続けました。

------ Discover test started ------
========== Discover test finished: 2 found (0:00:00.1310428) ==========
No tests found to run.

私の場合、0-Localという新しい構成を作成した後にのみ問題が発生しました。 csprojファイルの関連セクションに<DebugSymbols>true</DebugSymbolsを追加する必要があったため、次のようになります。

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '0-Local|AnyCPU'">
  <DebugSymbols>true</DebugSymbols>
  <OutputPath>bin\0-Local\</OutputPath>
</PropertyGroup>
1
David Kennedy

これはバグでなければならず、特にすべてのテストメソッドを個別に再度有効にしなければならないため、絶対的な苦痛です。しかし、ちょっとしたラテラル思考がより良い解決策を生み出しました-テストクラスの名前を変更して再構築します。その後、名前を変更します。動作しているようです。おっと-いいえ。クラスの名前変更は機能しますが、名前を変更すると元の設定に戻ります。秘Theは、Visual Studioを閉じて、.vsmdi(Visual Studioテストメタデータ)ファイルを削除することです。これは再生成されます。

1
Dave

コードがCLI(マネージc ++)であり、テストクラスが抽象基本クラスから継承する場合、テストクラスが基本の純粋仮想メソッドを実装していることを確認してください。実装しなかった場合、「実行するテストが見つかりません」というメッセージが表示される場合があります。

0
Ron.A

これと同じ問題があったが、以前の回答を読んで、すべてが良さそうに見えた。

私の場合、テストスイートを実行して、わずかな変更を加え、ソリューションを構築し、テストを実行しようとしました。立ち入り禁止。さらに数回ビルドして、他の人が試した問題を探してみました。まだ行かない。

テストメソッドの1つでEnterキーを押して新規を追加し、F6キーを押してソリューションを構築し、[ユニットテストの実行]をクリックしました。

ビンゴ!すべてがスムーズに実行されました。

0
Tony DiTola

これは私が直面している典型的な問題です。しかし、私が自分で従った最も簡単な解決策は...プロジェクトを一度ビルドしてから再ビルドするだけです。解決できるように。

0
pradip Kr Sen

私はpublic TestContext TestContextテスト出力に書き込み、スコープをprivateに変更するメソッド。これにより、すべてのテストが発見不可能になりました。 publicに戻すと助けになりました。

0
r3verse

NUnitを使用するグーグル、特にMS UnitテストからNUnitに移行したグーグル向けのもう1つの方法です。プロジェクトをMS Testプロジェクトとして識別するプロジェクトタイプGuidsをプロジェクトファイルから削除してください。

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
0
Mak R

ソリューションにVSMDIファイルがありますか?このファイルは必須と考えられます(検証されていません)。

0
smaclell