C# MSTest:没有运行任何测试,因为没有加载任何测试或所选测试被禁用
我有一个具有以下结构的c#解决方案: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
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>