MSTest:未运行任何测试,因为未加载任何测试或禁用所选测试

时间:2010-02-22 22:50:49

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

我有一个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);
    } 
}

当我尝试通过Test,Run,All Tests In Solution运行测试时,我在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 Test Project模板创建测试项目一样容易。

请注意:我并不是说我反对使用Visual Studio Test Project模板;对我来说,我喜欢理解窗帘背后是什么,因为这让我成为了一个更好的程序员。

18 个答案:

答案 0 :(得分:75)

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

答案 1 :(得分:45)

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

Bryan Cook建议在他的博客文章中查看关于Manually creating a MS Test Project的ProjectTypeGuids。显然,您需要的神奇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>

答案 2 :(得分:10)

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

答案 3 :(得分:9)

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

总结别人的贡献,特别是in this article,这是最终对我有用的:

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

答案 4 :(得分:4)

原始海报确实这样做了,但是在没有这样做之后我来到了这里:

确保[TestClass]声明在顶部,公开范围:

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

答案 5 :(得分:2)

我只是手动完成了这个:

使用以下代码创建了一个新的C#类库项目:

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

保存项目,然后转到“文件 - &gt;添加 - >新项目”并选择“测试项目”。在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测试。尝试从头开始。

答案 6 :(得分:2)

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

答案 7 :(得分:2)

我收到了同样的消息,结果证明我在网络驱动器上有我的单元测试项目。一旦我把它移动到本地它运行正常。如果您收到此错误,只需尝试一下。 约翰

答案 8 :(得分:1)

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

答案 9 :(得分:1)

这一定是个bug,绝对是一种痛苦,特别是因为你必须单独重新启用每一种测试方法。然而,有点iof横向思维产生了更好的解决方案 - 重命名测试类并重建。然后重命名。似乎工作。 哎呀 - 不,不。重命名该类可以工作,但当它重命名时,它将恢复为原始设置。 诀窍是关闭Visual Studio并删除.vsmdi(visual studio测试元数据)文件。这将重新生成。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

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

就我而言,问题只发生在我创建一个名为0-Local的新配置之后。我必须将<DebugSymbols>true</DebugSymbols添加到我的csproj文件的相关部分,所以它看起来像这样:

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

答案 12 :(得分:0)

这也是我面临的典型问题。但我所遵循的最简单的解决方案是......只需构建一次项目并重新构建它。这样你就可以解决它。

答案 13 :(得分:0)

如果有同样的问题但是阅读以前的答案,一切看起来都不错。

在我的情况下,我刚刚运行测试套件做了一个小改动,构建了解决方案并尝试运行测试。不行。我尝试过多次建造并寻找其他人尝试过的问题。仍然没有。

我在我的一个测试方法中输入enter来添加一个新的并按F6来构建解决方案并单击运行Unit Tests。

宾果!一切顺利。

答案 14 :(得分:0)

您的解决方案中是否有VSMDI文件?我相信这个文件是必需的(未经验证)。

答案 15 :(得分:0)

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

答案 16 :(得分:0)

另一个使用NUnit的google使用NUnit,特别是那些从MS Unit test迁移到NUnit的人。请从项目文件中删除将项目标识为MS Test项目的项目类型Guids。

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

答案 17 :(得分:0)

如果您的代码是CLI(托管c ++)并且您的测试类继承自抽象基类,请确保您的测试类实现基本的纯虚方法。 如果你没有实现它,你可能会看到&#34;没有发现任何测试运行&#34;消息。