MSTest:没有testing运行,因为没有加载testing或select的testing被禁用
我有以下结构的ac#解决scheme:
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); } }
当我尝试通过testing,运行,在解决scheme中的所有testing来运行testing时,我在VS2008状态行上得到以下内容:
没有testing运行,因为没有加载testing或select的testing被禁用。
testing,Windows,testing视图显示没有testing。
注意:我手动创build了testing(适用于xUnit.net),而不是使用微软的向导。
我已经比较了我的手创build的MSTest安装程序和我使用向导生成的另一个testing, 他们似乎是非常相似。
问题:上面的错误信息最可能的原因是什么?
编辑2010-02-25:更多信息:
我右键单击Solution Items文件夹,然后selectAdd,New Project,键入Test Projects,Test Documents :: Visual Studio Test Project模板。
新项目的默认值不做任何testing“TestMethod1”被检测并通过。
但是,我的testing没有显示出来…所以我复制和粘贴我的testing方法到默认的testing项目“TestProject1”。
我的testing在“TestProject”中被检测到,但不在其原始位置。
我仔细比较了“TestProject1”的文件,组织和设置与我手工创build的testing项目。
在这一点上,我猜测一些设置是由Visual Studio Test Project模板创build的,而这个模板不容易检测到。
imo,创build一个testing项目就像使用Visual Studio Test Project模板创buildtesting项目一样简单。
请注意:我并不是说我反对使用Visual Studio Test Project模板; 对我来说,我喜欢理解幕后的内容,因为这使我成为一个更好的程序员。
另一个谷歌 – 这一个原来是我的问题,这是令人尴尬的头脑。 确保您的testing项目被设置为使用您正在使用的任何解决schemeconfiguration。 如果testing组件没有被构build,VS将无法在不存在的组件中find任何testing,并且您将头靠在墙上一会儿:-)
可能有点晚,但这个问题谷歌search,我想我会扔一些面包屑未来谷歌。
Bryan Cookbuild议在他的博客文章中检查ProjectTypeGuids 手动创build一个MStesting项目 。 显然,您需要的魔术GUID为{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
为c#和{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}
。 查看他的博客文章了解更多详情。
如果博客post消失,则需要在csproj文件的主要属性组中添加以下元素:
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Google员工的另一个想法就是在那里。 我的问题是试图让忽略的testing再次运行。 如果您删除忽略标签,则会出现相同的MS错误消息。 不会自动重新启用testing。 本文将带您完成最后一步。 http://richallen.blogspot.com/2008/05/ms-test-re-enabling-ignored-tests.html
修复很简单,即使它不应该需要,如果Visual Studio工作,它应该。
总结别人的贡献,特别是在这篇文章中 ,这里是最终为我工作的:
- 使用configurationpipe理器来确保你的testing项目被选中来构build你正在使用的任何configuration和平台(例如:configuration = Debug和platform = x86)
- 确保你的方法属于一个
[TestClass]
,并且它被标记为[TestMethod]
,并且不使用属性[Ignore]
- 使用testing视图来查找您的testing。
- 打开您的属性窗口( F4 ),并确保您的testing已启用
原来的海报确实是这样做的,但我没有做完这件事就到了这里:
确保[TestClass]
在顶部声明,公共范围:
namespace XYZ.API.Repository.Tests { [TestClass()] public class ClientTests {
我收到了同样的信息,结果certificate我的networking驱动器上有unit testing项目。 一旦我把它移到本地,它运行良好。 只是一些尝试,如果你得到这个错误。 约翰
我刚刚手动完成这个:
用下面的代码创build一个新的C#类库项目:
namespace SO_Answer { public class Class1 { public void Test() { var k = "Hello"; } } }
保存项目,然后进入“文件 – >添加 – >新build项目”,select“testing项目”。 在VS创buildunit testing项目之后,我添加了一个对我之前创build的类库项目的引用。
在我的testing中,我有这样的代码:
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
出现。
我想不出为什么你的unit testing没有被拿起的原因。 唯一一次我有这个是因为我使用MSTest跑步者尝试错误地查看NUnittesting。 尝试从头开始。
这可能是另一个原因。 检查解决scheme是否在64位上运行。 如果是这样,将其更改为x86。
这肯定是一个bug,而且是一个绝对的痛苦,尤其是你必须单独重新启用每一个testing方法。 然而有点侧面思考产生了一个更好的解决scheme – 重命名testing类和重build。 然后重新命名它。 似乎工作。 哎呀 – 不,不。 重命名类可以工作,但是当它重新命名时,它将恢复到原始设置。 诀窍是closuresVisual Studio并删除.vsmdi(visual studiotesting元数据)文件。 这将被重新生成。
当您遇到此问题时,在Visual Studio中,您必须创build一个testing项目。 1.select工具栏中的testing,然后select“新testing”。 创build你的项目,并在这一点上创build你的testing方法。 它应该在这之后工作。
对于后代:我刚刚发现,将testing标记为静态,使得它们在testing列表中无法出现。 显然这是不允许的。
没有其他答案为我工作。 我一直在输出窗口中收到以下消息:
------ Discover test started ------ ========== Discover test finished: 2 found (0:00:00.1310428) ========== No tests found to run.
在我的情况下,只有在我创build了一个名为0-Local的新configuration之后才出现问题。 我必须添加<DebugSymbols>true</DebugSymbols
到我的csproj文件的相关部分,所以它看起来像这样:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '0-Local|AnyCPU'"> <DebugSymbols>true</DebugSymbols> <OutputPath>bin\0-Local\</OutputPath> </PropertyGroup>
你的解决scheme中是否有VSMDI文件? 我相信这个文件是必需的(未经过validation)。
这也是我所面临的典型问题。 但是作为我自己所遵循的最简单的解决scheme是…只需构build一次项目并重新构build一次。 所以你可以解决它。
有同样的问题,但阅读以前的答案,一切看起来不错。
就我而言,我刚刚运行testing套件做了一些小改动,构build了解决scheme并试图运行testing。 不行。 我试了几次,试图找出其他人尝试过的问题。 还是不行
我打入我的一个testing方法中添加一个新的和命中F6来构build解决scheme,并单击运行unit testing。
答对了! 一切顺利。
同样的问题,不同的原因…
TestContext 必须是一个公共variables。
我正在使用public TestContext TestContext
方法写入testing输出并将范围更改为private
。 这使得每一个testing都无法发现。 把它改回public
帮助。
另一个使用NUnit的谷歌用户,尤其是那些从MSunit testing迁移到NUnit的用户。 请从项目文件中删除将项目标识为MS Test项目的项目typesGuids。
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
如果您的代码是CLI(托pipec ++),并且您的testing类从抽象基类inheritance,请确保您的testing类实现基本的纯虚拟方法。 如果你没有实现它,你可能会看到“没有testing发现运行”的消息。