如何在Visual C# 2010 Express中进行单元测试?

47

Visual C# 2010 Express有单元测试功能吗?

9个回答

38

如前所述,Express版本不具备内置功能,也不允许使用插件,但您可以使用外部工具,例如NUnit

如果需要的话,您还可以设置一个命令从Visual Studio Express的“工具->外部工具”菜单选项中运行测试运行器。

这里是一个链接,展示了如何在VS C# 2008 Express中进行操作(向下滚动到末尾),但我认为这对2010年版本也是适用的。

这里是一个新的有效链接。


2
此外,在Sharpdevelop 4.0中打开(已在VS Express中打开)的项目将提供运行测试的“可视化”功能(其结果与源代码相关),并可能快速修改代码(当您Alt_Tab回到VS Express时,它会被正确识别)。因此,拥有可用的“可视化”单元测试功能的代价大约是多一个Alt-Tab到SharpDevelop(可能还需要点击“运行测试”)。 - mlvljr
请注意,除非外部工具专门为其编译,否则此方法无法在Windows Phone的VS Express上运行... - funkybro
谢谢,已添加新链接。 - Andy

10

没有内置的工具,但你总可以使用 nUnit。

MSTest 随 Pro 版本及以上一同打包。


9

在2010年,使用外部应用程序是可能的,但是调试单元测试变得困难。如果您想要调试,使用NUnit可能是最佳选择(但不是唯一选择,请参见ExpressUnit)。请参阅另一个SO线程上的答案。它链接到一个博客,提到将测试项目作为控制台应用程序运行,并直接调用nunit库dll来启动测试:

using System;

namespace RunTests
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            var args = new string[] { Assembly.GetExecutingAssembly().Location, "/run" };
            NUnit.Gui.AppEntry.Main(args);
        }
    }
}

博客文章出现了404错误。这是在UI中调试单元测试的好方法。感谢分享。我最终创建了一个单独的项目,添加了对要测试的程序集的引用,然后使用Assembly.GetAssembly(typeof(MyAssembly.MyType)).Location来将程序集源到测试运行器。 - cod3monk3y

8
Visual Studio Express版本的限制是明确禁止插件和附加组件。它们不带内置测试解决方案,并且您无法添加其中一个。
您最佳/唯一的选择是使用独立的测试运行器,例如nUnit、mspec等,并从VSE外部运行它。

7

现在Visual Studio 2013 Express中已经包含了以下内容:http://msdn.microsoft.com/en-us/library/dd264975.aspx

如果测试资源管理器(Test Explorer)未显示,请选择Visual Studio菜单上的测试(Test),选择窗口(Windows),然后选择测试资源管理器(Test Explorer)

enter image description here


看到微软跟风做“测试”,只是因为其他人都在做,真是太可悲了。这是一种时尚。 (说真的,现在已经是2013年了,我们才刚刚在VS中引入集成单元测试??) - cod3monk3y
2
@cod3monk3y,多么奇怪的评论啊。虽然花了这么长时间,但肯定是有所改进了吧?我几乎不会把测试描述为一种时尚! - matt burns
1
绝对是一项改进!我已经使用C#开发了十多年,非常支持单元测试、代码覆盖率、流程等。所以,这个评论是勉强的讽刺。测试应该是开发过程中不可或缺的部分,我很高兴看到它最终成为所有开发人员共享的基本功能之一。我最近一直在进行一些Python和Angular/JS/Flask/Python编程,并喜欢单元测试是文化的一部分(python -m unittest discover for python and jasmine/karma for JS)。很高兴看到这成为新开发者工具包的一部分。 - cod3monk3y
这在 Express 版本中不起作用。链接并未提及 Express,只有完整版本。 - SwDevMan81

1
作为更新,我目前正在使用 Visual Studio Express for Desktop,自2010年以来,VS套件已经完全重建,更准确地反映了“大兄弟”的特点。
单元测试现在作为内置功能可用,并且与 Visual Studio 非 Express 版本的工作方式相同(我还没有测试所有功能)。

0

请看一下 Codeplex 上的 NHarness,这是一个非常简单的库,允许您在测试项目中运行 NUnit 测试夹具。这使您有能力在需要时通过单元测试进行调试。

以下是一个测试运行器的示例(来自 Codeplex 页面)

    public class RunTests
    {
        public static void Main(string[] args)
        {
            TestResults results = Tester.RunTestsInClass<Tests>();

            Console.WriteLine("Tests Run: {0}", results.NumberOfResults);
            Console.WriteLine("Results {0}:PASSED {1}:FAILED", results.NumberOfPasses, results.NumberOfFails);
            Console.WriteLine("Details:");

            foreach (TestResult result in results)
            {
                Console.WriteLine("Test {0}: {1} {2}",
                                            result.MethodName,
                                            result.Result,
                                            result.Result == TestResult.Outcome.Fail ? "\r\n" + result.Message : "");
            }

            Console.ReadLine();
        }
    }

这个库的好处在于TestResults类可以用来检索有关执行的测试的信息,因此该库也可以用于自定义单元测试应用程序。


0
你可以在项目中设置一个带有Main()方法的额外类,并将其选择为启动对象,从那里进行调试。这种方法可能不适用于执行更复杂任务的情况,因为您无法利用更多的测试特定功能,但对于一些较简单的项目可能会有所帮助。如果您的项目是一个类库,请考虑将其转换为控制台应用程序,完成测试后再切换回来。

0

(注:我知道这篇文章有点旧了,但这可能会对某些人有所帮助)

如Andy在上面发布的那样,您可以使用NUnit
但是Andy发布的链接中的设置在VS C# 2010中不再起作用。
以下是我在“外部工具”窗口中使用的设置:

命令:C:\Program Files (x86)\NUnit 2.6.2\bin\nunit-x86.exe
bin目录中还有一个nunit.exe文件)

参数:$(ProjectDir)$(ProjectFileName)
初始目录:$(ProjectDir)bin/Debug/$(TargetName)$(TargetExt)


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