如何将现有的程序集转换为 MS 单元测试程序集?

30

在 Visual Studio 2010 Pro 中,我如何将传统程序集轻松转换为 MS 单元测试程序集?

是否有在 .csproj 文件中激活的标志?


有没有可能您真正接受这个问题的正确答案? - Robert Harvey
@RobertHarvey,你认为哪一个是正确的?目前被Dror Helper标记为接受答案的似乎对我有效。 - Tom Wright
相关帖子 - 将C#库转换为MSTest项目 - RBT
3个回答

53
问题在于测试项目在项目文件上被“标记”了,您可以按照以下四个简单步骤将类库转换为测试项目:
  1. 卸载项目(.prj)文件,然后以更新模式打开它。
  2. 向项目中添加以下代码行:
    C#:

    <Project>
     <PropertyGroup>
      <AssemblyName>....</AssemblyName>
      <!-- add this line below -->
      <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     </PropertyGroup>
    </Project>
    

    VB - <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F- 5ABD9991F28F}</ProjectTypeGuids>

  3. 重新加载项目
  4. 运行(现在可正常工作的)测试
  5. 请注意,您需要手动添加对 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 的引用,以便能够使用与测试相关的属性

    更新:在即将到来的MSTest V2中,这不再是必要的,因为MSTest成为一个NuGet包,可以像NUnit/XUnit一样使用。


1
啊,VS2010干净直观的界面真是一个绝妙的解决方案! - John
要将其转换回 C# 库,只需完全删除该行即可。 - womp
1
希望下一个MSTest版本(V2)能够使这个过时,并且我们可以使用简单的类库 https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/ - Dror Helper
值得注意的是,您必须添加对“Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll”的引用才能访问所需的属性。此外,它适用于VS 2017。 - Marc L.
请注意,VS2017中默认的“单元测试”项目不再是一个特殊项目,而是一个包含两个NuGet包的类库。 - Dror Helper

0
在Visual Studio 2017中,您可以向C#项目添加NuGet包MSTest.TestAdapterMSTest.TestFramework,然后使用[TestClass][TestMethod]属性。它们将自动被发现并列在Test Explorer中。不需要手动添加ProjectTypeGuids来启用测试。
// MyFancyClassTests.cs

namespace MyTests
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class MyFancyClassTest
    {
        private readonly MyFancyClass _MyFancyClass;

        public MyFancyClassTest()
        {
            _MyFancyClass= new MyFancyClass();
        }

        [TestMethod]
        public void MyFancyClass_UninitializedName_ReturnsEmptyString()
        {
            Assert.AreEqual(string.Empty, _MyFancyClass.Name);
        }
    }
}

-3

单元测试项目只是一个类库,其中包含带有属性[TestClass]的类,.csproj文件没有任何标志。您可以将类添加到您的项目中并设置属性[TestClass],它将成为测试类。


好的,但我想在Visual Studio 2010中开始单元测试。即使我添加了对Microsoft.VisualStudio.QualityTools.UnitTestFramework的引用,并在我的类中使用[TestClass]和[TestMethod]属性,我也无法在VS2010的测试视图窗口中查看我的方法。 - Patrice Pezillier
在方法出现在窗口之前,您可能需要先构建代码。仅仅将属性添加到代码中而不进行构建,不会更新测试视图窗口(我想!)。 - Jason Evans
16
我曾经遇到了同样的问题。在添加带有[TestClass]属性的类并包含一些带有[TestMethod]属性的方法之后重新构建,测试用例没有出现在测试视图中。将<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>添加到csproj文件中可以解决此问题。请参阅http://social.msdn.microsoft.com/forums/en-US/vststest/thread/2192fac0-0de7-45c6-872a-2be49e95ce2c/。 - Teevus
1
Teevus,你的评论包含了这个问题的最佳答案。也许你应该将其添加为真正的答案,这样我们就可以投票支持它 :) - Antony Perkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接