关于c#:MSTest:由于未加载任何测试或禁用了所选测试,因此未运行任何测试

MSTest: No tests are run because no tests are loaded or the selected tests are disabled

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

1
2
3
4
5
6
mySolution
  myProject
  myProject.MSTests
    References
      Microsoft.VisualStudio.QualityTools.UnitTestFramework
    sutMSTests.cs

sutMSTests.cs:

1
2
3
4
5
6
7
8
9
[TestClass()]
public class sutMSTests
{
    [TestMethod]
    public void MyTest0()
    {
        Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(4, 2 + 2);
    }
}

当我尝试通过"测试","运行","解决方案中的所有测试"运行测试时,在VS2008状态行上显示以下信息:

No tests are run because no tests are loaded or the selected tests are disabled.

测试,Windows,测试视图不显示任何测试。

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

我已经将手动创建的MSTest安装程序与使用向导生成的另一个测试进行了比较,它们看起来非常相似。

问题:上面的错误信息最可能的原因是什么?

编辑2010-02-25:更多信息:
我右键单击"解决方案项目"文件夹,然后选择"添加","新建项目",键入"测试项目","测试文档:: Visual Studio测试项目"模板。

检测到并通过了新项目的默认不执行测试" TestMethod1"。
但是,我的测试没有显示...所以我将测试方法复制并粘贴到默认的测试项目" TestProject1"中。

在" TestProject"中检测到我的测试,但未在其原始位置。

我将" TestProject1"的文件,组织和设置与我手工创建的测试项目进行了紧密比较。

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

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

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


对于Google员工来说,还有一个-原来这是我的问题,这让我很尴尬。确保将您的测试项目设置为使用您正在使用的任何解决方案配置进行构建。如果没有构建测试程序集,VS将无法在不存在的程序集中找到任何测试,并且您将把头撞在墙上一会儿:-)


可能有点晚了,但是这个问题在谷歌搜索上很好,我想我会为以后的谷歌搜索者扔些碎屑。

布莱恩·库克(Bryan Cook)建议在他的有关手动创建MS测试项目的博客文章中检查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文件的main属性组中添加以下元素:

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


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


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

总结其他人的贡献,尤其是在本文中,以下是对我最终有用的:

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


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

确保[TestClass]在顶部声明,在作用域中是公共的:

1
2
3
4
5
namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {

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


我只是手动完成此操作:

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

1
2
3
4
5
6
7
8
9
10
namespace SO_Answer
{
    public class Class1
    {
        public void Test()
        {
            var k ="Hello";
        }
    }
}

保存项目,然后转到"文件"->"添加"->"新项目",然后选择"测试项目"。在VS创建了单元测试项目之后,我添加了对我之前创建的类库项目的引用。

在我的测试中,我有以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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测试。尝试从头开始。


我收到了同样的消息,结果是我的单元测试项目在网络驱动器上。一旦我将其移动到本地,它就可以正常运行。如果遇到此错误,请尝试尝试。
约翰


这一定是一个错误,绝对是一件痛苦的事情,尤其是当您必须分别重新启用每个测试方法时。但是,横向思考会产生更好的解决方案-重命名测试类并进行重建。然后重新命名。似乎可以工作。
糟糕-不,不是。重命名该类是可行的,但是在将其重命名后,它将恢复为原始设置。
诀窍是关闭Visual Studio并删除.vsmdi(Visual Studio测试元数据)文件。这将被重新生成。


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


没有其他答案对我有用。我在输出窗口中不断收到以下消息:

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

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

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


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


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


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

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

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

答对了!一切运行顺利。


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


这也是我也面临的典型问题。但是我自己遵循的最简单的解决方案是...只是构建项目一次,然后重新构建。这样您就可以解决它。


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


另一个面向使用NUnit的Google员工,尤其是那些从MS Unit测试迁移到NUnit的Google员工。请从项目文件中删除将项目标识为MS Test项目的Guid。

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