65

我有具有以下结构的 ac# 解决方案:

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: 更多信息:
我右键单击解决方案项目文件夹,然后选择添加,新建项目,键入测试项目,测试文档::Visual Studio 测试项目模板。

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

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

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

在这一点上,我猜测Visual Studio 测试项目模板进行了一些不易检测的设置。

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

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

4

18 回答 18

77

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

于 2010-06-17T01:55:29.490 回答
47

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

Bryan Cook 建议在他关于手动创建 MS 测试项目的博客文章中检查 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>
于 2010-06-17T01:42:20.050 回答
10

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

于 2011-03-11T22:14:00.083 回答
9

修复很简单,即使它不应该是必要的,如果 Visual Studio 可以正常工作的话。

总结一下其他人的贡献,特别是在这篇文章中,以下是最终对我有用的内容:

  • 使用配置管理器确保选择您的测试项目以构建您正在使用的任何配置和平台(例如:配置=调试和平台=x86)
  • 确保您的方法属于 a[TestClass]并且它都被标记[TestMethod],并且不使用该属性[Ignore]
  • 使用测试视图查找您的测试。 测试视图
  • 打开您的属性窗口 ( F4),并确保您的测试已启用 启用
于 2012-07-16T19:36:46.707 回答
4

原始海报确实这样做了,但我没有这样做后到达这里:

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

namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {
于 2014-05-20T00:01:49.260 回答
2

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

于 2011-11-16T17:20:11.407 回答
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 跑步者,我可以看到TestMethod1出现。

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

于 2010-02-22T23:13:05.453 回答
2

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

于 2011-05-03T19:38:44.870 回答
1

When you run into this issue, in Visual Studio, you have to create a Test Project. 1. Select Test in Tool bar and choose "New Test". Create your project and at this point create your test method. It should work after this point.

于 2011-09-15T16:28:08.763 回答
1

This must be a bug and is an absolute pain especially as you have to reenable every single test method individually. However a bit iof lateral thinking produced a better solution - rename the test class and rebuild. Then rename it back. Seems to work. Ooops - no it doesn't. Renaming the class works but when it's renamed back it reverts to the original settings. The trick is to close down Visual Studio and delete the .vsmdi (visual studio test meta data) file. This will be regenrated.

于 2011-04-28T08:02:20.827 回答
1

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

于 2013-11-18T21:49:04.713 回答
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>
于 2015-07-30T18:10:42.713 回答
0

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

于 2011-01-20T05:05:38.130 回答
0

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

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

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

答对了!一切都进行得很顺利。

于 2013-07-05T20:31:30.080 回答
0

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

于 2010-02-22T23:10:24.847 回答
0

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

于 2017-03-21T09:35:13.857 回答
0

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

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
于 2016-12-19T21:51:12.003 回答
0

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

于 2016-10-07T09:56:53.543 回答