Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSTest:没有运行任何测试,因为没有加载任何测试或所选测试被禁用_C#_Unit Testing_Mstest_Vs Unit Testing Framework - Fatal编程技术网

C# MSTest:没有运行任何测试,因为没有加载任何测试或所选测试被禁用

C# MSTest:没有运行任何测试,因为没有加载任何测试或所选测试被禁用,c#,unit-testing,mstest,vs-unit-testing-framework,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 MyTes

我有一个具有以下结构的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,Solution中的所有测试来运行测试时,我在VS2008状态行上得到以下信息:

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

测试、Windows、测试视图不显示任何测试

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

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

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

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

检测到并通过了新项目的默认不执行任何操作测试“TestMethod1”。
然而,我的测试没有出现。。。所以我复制并粘贴了我的测试方法到默认的测试项目“TestProject1”中

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

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

在这一点上,我猜测VisualStudio测试项目模板会做出一些不易检测的设置

在我看来,手工创建测试项目应该和使用VisualStudio测试项目模板创建测试项目一样容易


请注意:我并不是说我反对使用VisualStudio测试项目模板;对我来说,我喜欢了解幕后的情况,因为这使我成为一名更好的程序员

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

我刚刚手动完成此操作:

使用以下代码创建了一个新的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();

        }
    }
}
名称空间单元测试
{
/// 
///UnitTest1的摘要说明
/// 
[测试类]
公共类UnitTest1
{
/// 
///获取或设置提供
///有关当前测试运行的信息和功能。
///
公共TestContext TestContext{get;set;}
#区域附加测试属性
//在编写测试时,可以使用以下附加属性:
//在运行类中的第一个测试之前,请使用ClassInitialize运行代码
//[ClassInitialize()]
//公共静态void MyClassInitialize(TestContext TestContext){}
//在类中的所有测试都已运行后,使用ClassCleanup运行代码
//[ClassCleanup()]
//公共静态void MyClassCleanup(){}
//在运行每个测试之前,使用TestInitialize运行代码
//[测试初始化()]
//public void MyTestInitialize(){}
//使用TestCleanup在每个测试运行后运行代码
//[TestCleanup()]
//public void MyTestCleanup(){}
#端区
/// 
///试验方法1。
/// 
[测试方法]
公共void TestMethod1()
{
var f=新类别1();
}
}
}
我添加的唯一代码是a using语句和
var f=new Class1()语句。查看mstestrunner,我可以看到出现
TestMethod1


我想不出你的单元测试没有被接受的原因。我唯一一次这样做是因为我错误地使用MSTest runner尝试查看NUnit测试。试着从头开始。

可能有点晚了,但这个问题很容易被谷歌发现,我想我会为未来的谷歌用户扔一些面包屑

Bryan Cook建议在他的博客文章中查看ProjectTypeGuids。显然,您需要的神奇guid是
{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
用于c#和
{3AC096D0-A1C2-E12C-1390-A8335801FDB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}
用于VB。更多详情请参见他的博客文章

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

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

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

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

谷歌的另一个想法。我的问题是试图让被忽略的测试再次运行。如果删除忽略标签,则会出现相同的MS错误消息。不会自动重新启用测试。本文将带您完成最后一步

这肯定是一个bug,是一个绝对的痛苦,尤其是当您必须单独重新启用每个测试方法时。然而,一点横向思考产生了一个更好的解决方案——重命名测试类并重建。然后重新命名它。似乎有效。 哦,不,它没有。重命名类是可行的,但当它重新重命名时,它会恢复到原始设置。 诀窍在于接近成功
namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {
------ Discover test started ------
========== Discover test finished: 2 found (0:00:00.1310428) ==========
No tests found to run.
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '0-Local|AnyCPU'">
  <DebugSymbols>true</DebugSymbols>
  <OutputPath>bin\0-Local\</OutputPath>
</PropertyGroup>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>