【问题标题】:MSTest: No tests are run because no tests are loaded or the selected tests are disabledMSTest:没有运行任何测试,因为没有加载任何测试或选定的测试被禁用
【发布时间】:2011-01-19 20:52:12
【问题描述】:

我有一个具有以下结构的 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,测试视图显示没有测试。

注意:我手动创建了测试(适用于 xUnit.net),而不是使用 Microsoft 的向导。

我已将我手工创建的 MSTest 设置与我使用向导生成的另一个测试设置进行了比较,它们似乎非常相似。

问题:出现上述错误消息的最可能原因是什么?

编辑 2010-02-25: 更多信息:
我右键单击 Solution Items 文件夹,然后选择 Add,New Project,键入 Test Projects,Test Documents::Visual Studio Test Project 模板。

检测到并通过了新项目的默认无操作测试“TestMethod1”。
但是,我的测试没有显示出来......所以我将我的测试方法复制并粘贴到默认的测试测试项目“TestProject1”中。

我的测试是在“TestProject”中检测到的,但不是在其原始位置。

我将“TestProject1”的文件、组织和设置与我手工创建的测试项目进行了仔细比较。

此时,我猜测 Visual Studio 测试项目模板进行了一些不易检测的设置。

imo,手动创建一个测试项目应该和使用 Visual Studio 测试项目模板创建一个一样容易。

请注意:我并不是说我反对使用 Visual Studio 测试项目模板;对我来说,我喜欢了解幕后的东西,因为这使我成为一个更好的程序员。

【问题讨论】:

  • 感谢以下答案和cmet中的所有参与和建议;如果可以选择,xUnit.net (Jim Newkirk, Brad Wilson) 是我首选的单元测试框架。我认为问题是 MSTest 可能是 MSTest 创建了太多文件,删除它们可能已经解决了问题。我说可能有,因为我不记得了。当时我正在研究 .NET 单元测试框架。该项目目前在我的后座上。我将来会尝试回到这个问题上。谢谢你们。我会回来的。 g.

标签: c# unit-testing mstest vs-unit-testing-framework


【解决方案1】:

您的解决方案中有 VSMDI 文件吗?我认为此文件是必需的(未验证)。

【讨论】:

  • .vsmdi 文件似乎不是必需的。如上所述,在我的编辑中,我使用 vs 模板创建了一个测试项目,并看到了默认测试。删除所有 .vsmdi 文件后,使用模板创建的项目中的测试仍然运行。我试图了解模板做了什么特殊的“调整”。这很令人沮丧,因为使用 xUnit.net 手动创建测试项目非常容易。谢谢你的建议。
  • 不用担心。我不得不使用 MS Test 我过去的几份工作,发现它对 VSMDI 文件的依赖是一个巨大的痛苦。某些源代码控制提供商的情况更糟。祝你好运。
  • 出于某种原因,我的 VS2008 解决方案中有 2 个 VSMDI 文件。它曾经工作正常,但不再工作了:(所以我关闭了 VS,删除了 VSMDI 文件,重新打开了解决方案并运行了解决方案中的所有测试。这显示了一个错误,但它似乎重新创建了一个新的 VSMDI。然后在解决方案中运行所有测试又开始工作了。呸!
【解决方案2】:

我刚刚手动完成了这个:

使用以下代码创建了一个新的 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 runner,我可以看到 TestMethod1 出现了。

我想不出你的单元测试没有被选中的原因。我唯一一次遇到这种情况是因为我使用 MSTest 运行程序错误地尝试查看 NUnit 测试。尝试从头开始。

【讨论】:

  • 你是个天才。问题是添加了错误的解决方案类型(类库而不是测试)。
【解决方案3】:

可能有点晚了,但是这个问题很好用,我想我会为未来的 googlers 扔一些面包屑。

Bryan Cook 建议在他的博客文章中查看有关 Manually creating a MS Test Project 的 ProjectTypeGuids。显然,您需要的魔法 GUID 是 c# 的 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 和 VB 的 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}。有关详细信息,请参阅他的博客文章。

如果博客文章消失了,您需要在 csproj 文件的主属性组中添加以下元素:

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

【讨论】:

  • 工作就像一个魅力 - 太棒了。
  • 我不得不手动将这一行添加到 csproj 文件中。 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
【解决方案4】:

为 google 员工准备的另一个问题 - 这个问题原来是我的问题,而且令人尴尬地被我愚弄了。确保您的测试项目设置为在您使用的任何解决方案配置中构建。如果没有构建测试程序集,VS 将无法在不存在的程序集中找到任何测试,并且您将头撞墙一段时间:-)

【讨论】:

  • 你是对的。您需要确保正在构建程序集。在我的情况下,这个错误是由于以下组合造成的:(a)在“配置管理器”中,“构建”按钮没有被勾选(b)所有其他组件都设置为 x32,这个设置为“配置管理器”中的“任何 CPU”(c)它抱怨它需要一个签名的程序集,所以我需要在项目属性中设置它。
  • 哈哈!经典 - 这也让我着迷。
  • 谢谢。正在检查主机设置并且 vsmdi 被混淆了,但这帮助了我。
  • 嘿,谢谢。也有我 - 太简单了!为什么它被设置为不建造是另一回事......
  • 新创建的测试项目的剪切粘贴显然将其从构建中删除,这个问题:(
【解决方案5】:

这也是我遇到的典型问题。但我自己遵循的最简单的解决方案是......只需构建一次项目并再次重建它。以便您解决它。

【讨论】:

    【解决方案6】:

    Google 员工的另一个想法。我的问题是试图让被忽略的测试再次运行。如果删除 Ignore 标签,则会出现相同的 MS 错误消息。不会自动重新启用测试。本文将带您完成最后一步。 http://richallen.blogspot.com/2008/05/ms-test-re-enabling-ignored-tests.html

    【讨论】:

    • buff...谢谢老兄,我正要把电脑扔出窗外。希望它会在 Visual Studio 2083 中得到修复
    【解决方案7】:

    这一定是一个错误,而且是绝对的痛苦,尤其是当您必须单独重新启用每个测试方法时。然而,一点点横向思考产生了一个更好的解决方案——重命名测试类并重建。然后重命名回来。似乎工作。 哎呀-不,它没有。重命名类是可行的,但是当它重命名时,它会恢复为原始设置。 诀窍是关闭 Visual Studio 并删除 .vsmdi(Visual Studio 测试元数据)文件。这将被重新生成。

    【讨论】:

      【解决方案8】:

      我收到了同样的消息,结果证明我的单元测试项目位于网络驱动器上。一旦我将它移到本地,它就运行良好。如果您收到此错误,请尝试一下。 约翰

      【讨论】:

        【解决方案9】:

        当您遇到此问题时,您必须在 Visual Studio 中创建一个测试项目。 1. 在工具栏中选择测试,然后选择“新建测试”。创建您的项目,此时创建您的测试方法。它应该在此之后工作。

        【讨论】:

          【解决方案10】:

          这可能是另一个原因。检查解决方案是否在 64 位上运行。如果是这样,请将其更改为 x86。

          【讨论】:

            【解决方案11】:

            如果 Visual Studio 正常工作,即使不需要它,修复也很简单。

            总结其他人的贡献,尤其是in this article,以下是最终对我有用的内容:

            • 使用配置管理器确保选择您的测试项目以在您使用的任何配置和平台中构建(例如:configuration=Debug 和 platform=x86)
            • 确保您的方法属于[TestClass],并且它都标记为[TestMethod],并且没有使用属性[Ignore]
            • 使用测试视图查找您的测试。
            • 打开您的属性窗口 (F4),并确保您的测试已启用

            【讨论】:

            • 这不是很明显,您可以将新的测试项目添加到 VS 解决方案,按 F6 构建它,它没有构建,因为它不是配置的一部分......然后你去测试列表编辑器和拉你的头发 30 分钟想知道为什么没有测试出现!谢谢古斯塔沃。
            • 完全!我希望 UI 能给你一些指示,表明给定项目不是为给定配置构建的——有点像当 C++ 宏在不活动时变灰时的样子。
            【解决方案12】:

            有同样的问题,但阅读以前的答案,一切看起来都很好。

            就我而言,我刚刚运行了测试套件,做了一个小改动,构建了解决方案并尝试运行测试。不去。我尝试了多次构建并寻找其他人尝试过的问题。还是不行。

            我在我的一种测试方法中按 Enter 以添加新方法,然后按 F6 构建解决方案并单击运行单元测试。

            宾果!一切都进行得很顺利。

            【讨论】:

              【解决方案13】:

              对于后代:我刚刚发现将测试标记为静态会使它们默默地无法出现在测试列表中。显然这是不允许的。

              【讨论】:

                【解决方案14】:

                原来的海报是这样做的,但我没有这样做就到了这里:

                确保[TestClass] 声明在顶部,在范围内是公共的:

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

                【讨论】:

                  【解决方案15】:

                  其他答案都不适合我。我一直在输出窗口中收到以下消息:

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

                  就我而言,问题仅在我创建了一个名为 0-Local 的新配置后才出现。我必须将 &lt;DebugSymbols&gt;true&lt;/DebugSymbols 添加到我的 csproj 文件的相关部分,所以它看起来像这样:

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

                  【讨论】:

                    【解决方案16】:

                    我正在使用public TestContext TestContext 方法写入测试输出并将范围更改为private。这使得每个测试都无法被发现。将其改回 public 有帮助。

                    【讨论】:

                      【解决方案17】:

                      另一个适用于使用 NUnit 的谷歌用户,尤其是那些从 MS Unit 测试迁移到 NUnit 的用户。请从项目文件中删除将项目标识为 MS 测试项目的项目类型指南。

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

                      【讨论】:

                        【解决方案18】:

                        如果您的代码是 CLI(托管 c++)并且您的测试类继承自抽象基类,请确保您的测试类实现了基类的纯虚方法。 如果您没有实现它,您可能会看到“找不到要运行的测试”消息。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2020-03-18
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多