我有一个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模板;对我来说,我喜欢理解窗帘背后是什么,因为这让我成为了一个更好的程序员。
答案 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,这是最终对我有用的:
[TestClass]
并且标记为[TestMethod]
,并且不使用属性[Ignore]
答案 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;消息。