与窗体界面比较,控制台界面有一些额外的选项。命令行必须一直指定一个或多个文件名。控制台界面会一直创建一个XML格式的测试结果。缺省的文件取名为TestResult.xml,并且放置在工作目录里。
注:缺省的,nunit-console程序不会增加到你的路径里。如果有必要,你必须手动的增加它。
注:在Windows操作系统下,选项的前缀要么是斜杠,要么是一个连接符号。在Linux下,必须使用连接符号。带值的选项可以使用等于符号,冒号或空格来将选项和值分开。
指定一个程序集
控制台程序必须一直有一个指定的程序集或者工程。为了运行nunit.tests.dll包含的测试,使用下面的命令行:
nunit-console nunit.tests.dll
为了通过Visual Studio工程运行nunit.tests.dll的测试,使用:
nunit-console nunit.tests.csproj
为了通过你定义的NUnit测试工程运行同样的测试,使用:
nunit-console nunit.tests.nunit
指定一个程序集和Fixture
当指定一个fixture,你必给定包含测试fixture的程序集全路径名。例如,为了运行nunit.tests.dll的NUnit.Tests.AssertionTests,使用下面的命令:
nunit-console /fixture:NUnit.Tests.AssertionTests nunit.tests.dll
在 /fixture后指定的名称可以为一个TestFixture类,一个有效的套件(使用Suite属性)或者一个命名空间的名称。如果给定的是一个命名空间,在此命名空间下的所有fixture都将执行。本选项也可以和Visual Studio或NUnit工程一起使用。
指定CLR版本
编写的大多数应用程序都在某个特定版本的CLR下运行。少数设计为可以在多版本下正确操作。不管哪一种,能指定CLR版本进行运行测试是非常重要的。
当仅有一个CLR版本使用时,nunit-gui以及nunit-console的配置文件可以指定该版本。为了选择CLR更加方便,你可以使用提供的clr.bat命令来指定NUnit在那一个版本下运行。
例如,在.net 2.0 framework的RTM版本下,为了运行 nunit.tests.dll的测试,使用:
clr net-2.0 nunit-console nunit.tests.dll
clr.bat在NUnit 的bin目录下 .你可以将它放在你自己的路径下面,或者将它拷贝到一个恰当的位置。输入 clr /?获取一系列选项:
注:如果你在配置文件里使用一个<startup>块,它会预先使用本选项。
注:本命令指定为 Microsoft .Net framework. Mono框架提供其他方式来指定运行命令时所 使用的版本。
指定测试目录为Include或Exclude
NUnit2.2提供 CategoryAttribute属性将某个测试 指定到一个或多个目录中。在运行测试时,可以使用/include以及/exclude选项包含或排除目录。下 面的命令仅仅运行在BaseLine目录下的测试案例:
nunit-console myassembly.dll /include:BaseLine
下面的命令行运行所有测试,除了那些在Database目录下的:
nunit-console myassembly.dll /exclude:Database
可以在某个选项中指定多个目录,使用逗号来分隔它们.
注:在当前发布版本中,你可以选择包含或排除一运行中的目录,但不能2者都选择。为了更清楚的理解目录选择是如何工作的,回顾一下Category以及Explicit属性的文档。
重定向输出
在控制台显示的输出可以重定向到文件。它包含了测试程序创建的输出,同时也包含了NUnit自己创建的。下面的命令会将标准输入重定向到TestResult.txt.
nunit-console nunit.tests.dll /out:TestResult.txt
下面的命令将标准的错误输出重定向到StdErr.txt文件。
nunit-console nunit.tests.dll /err:StdErr.txt
对测试输出进行标记
每个测试的输出会跟着前面一个测试的输出之后。你可以使用/label选项创建一个标识标签在每个测试案例的开始处显示。
指定XML文件名
正如上面描述的 ,控制台程序会创建一个测试结果的XML形式。为了将输出文件名改为"console-test.xml“,使用下面的命令行选项:
nunit-console /xml:console-test.xml nunit.tests.dll
指定转化(Transform)文件
控制台使用XSLT将测试的结果转化为XML文件。当程序执行时,可以在屏幕上打印他们。控制台有一个缺省的转化形式,它是可执行的一部分。为了指定你自己的命名为"myTransform.xslt"的转化形式,使用下面的命令行选项:
nunit-console /transform:myTransform.xslt nunit.tests.dll
注:为了得到更多测试结果的信息,参看XML schema。该文件为Results.xsd,可执行文件同处一目录。缺省的转化为Summary.xslt ,它在核心源代码目录 。
指定运行哪一个配置
方运行Visual Studio或NUnit工程的测试时,会缺省的加载找到的第一个配置。通常是Debug。加载的配置也可以使用/config开关来控制。下面将加载nunit.tests.dll的Release配置,并在之下运行测试。
nunit-console nunit.tests.csproj /config:Release
注:当直接加载一个程序集时,该选项没有任何影响。
指定多个程序集
你可以使用控制台界面运行多个程序集的测试 ,甚至你并没有定义一个NUnit测试工程文件时。下面的命令会运行 assembly1.dll, assembly2.dll 和assembly3.dll包含的测试。
nunit-console assembly1.dll assembly2.dll assembly3.dll
注:你可以在命令行里指定多个程序集,不仅是多个NUnit,也可以是Visual Studio工程。更进一步,你可以不用指定一个带有多个程序集的NUnit或Visual Studio工程。/fixture选项可以和多个程序集一起使用,但是简单指定包含fixture的程序集可能更加有效。
其他选项
/noshadow选项禁止程序集的影拷贝,以改善其性能。
/thread选项会创建一个单独的线程供运行测试用。在某些情况下这是有必要的,例如测试必须在一特殊类型的公寓里运行。通过在一独立的线程里运行,在配置文件的元素下的ApartmentState和ThreadPriority设置会非常有用。如果无线程创建,他们会被忽略,apartment和控制台程序的一样。
注:控制台程序的apartment状态可以在不同的发布版本中改变,因此需要一个公寓的用户可以利用该设置,而不是依靠缺省的。
/wait选项让程序在退出前,等待用户的输入。当使用快捷方式运行nunit-console时非常有用。
/xmlconsole选项在控制台里显示未经处理的XML输出,而不是转化它。当调试XML格式的问题时非常有效。
/nologo选项禁止在程序启动时显示版权信息。
/help或/?选项显示一个简要的帮助信息。
如何命令行打印出来的内容太多,而这些又不是我们想要的,我们最关注的的测试出错的结果,这时候,我们可以将打印的结果输出到指定目录,比如: nunit-console.exe /out:c:\UserCenterLog.txt 该命令是把测试正常打印出来的代码全部存储到c:\UserCenterLog.txt,这时候,命令行窗口只会输出测试的结果以及测试出错有问题的代码:如下:
C:\tools\tomcat6\webapps\hudson-3.0.0\tempdir\jobs\UserCenter_TA\workspace>C:\tools\NUnit-2.6.2\bin\nunit-console.exe /out:c:\1.txt C:\tools\tomcat6\webapps\hudson-3.0.0\tempdir\jobs\UserCenter_TA\workspace\UserCenterTester\CQTest\CQTest\TestUserCentre\bin\Debug\TestUserCentre.dll NUnit-Console version 2.6.2.12296 Copyright (C) 2002-2012 Charlie Poole. Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. Copyright (C) 2000-2002 Philip Craig. All Rights Reserved. Runtime Environment - OS Version: Microsoft Windows NT 6.1.7600.0 CLR Version: 2.0.50727.4927 ( Net 3.5 ) ProcessModel: Default DomainUsage: Single Execution Runtime: net-3.5 ....................F.F.F.....F.F.F.................................................................................................................................F......................................................................................................................................................................................................F...................................................................................................................................................................................................................................................... Tests run: 602, Errors: 2, Failures: 6, Inconclusive: 0, Time: 195.1774164 seconds Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0 Errors and Failures: 1) Test Failure : TestUserCenter.TestSiteService.GetGamePasspod GetGamePasspod is null at TestUserCenter.TestSiteService.GetGamePasspod() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestSiteService.cs:line 764 2) Test Failure : TestUserCenter.TestSiteService.GetGamePasspod_gameId GetGamePasspod is null at TestUserCenter.TestSiteService.GetGamePasspod_gameId() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestSiteService.cs:line 785 3) Test Failure : TestUserCenter.TestSiteService.GetGamePasspods is null at TestUserCenter.TestSiteService.GetGamePasspods() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestSiteService.cs:line 807 4) Test Error : TestUserCenter.TestSiteService.GetUserCountAndFeeByDay hessiancsharp.io.CHessianException : The service has no method named: GetUserCountAndFeeByDay__2 at hessiancsharp.client.CHessianMethodCaller.DoHessianMethodCall(Object[] arrMethodArgs, MethodInfo methodInfo) at hessiancsharp.client.CHessianProxyStandardImpl.Invoke(IMessage msg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at BkNew.UserCenter.Common.IService.IUserTradingService.GetUserCountAndFeeByDay(String userId, DateTime time) at TestUserCenter.TestSiteService.GetUserCountAndFeeByDay() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestSiteService.cs:line 104 5) Test Error : TestUserCenter.TestSiteService.GetUserCountAndFeeByMonth hessiancsharp.io.CHessianException : The service has no method named: GetUserCountAndFeeByMonth__2 at hessiancsharp.client.CHessianMethodCaller.DoHessianMethodCall(Object[] arrMethodArgs, MethodInfo methodInfo) at hessiancsharp.client.CHessianProxyStandardImpl.Invoke(IMessage msg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at BkNew.UserCenter.Common.IService.IUserTradingService.GetUserCountAndFeeByMonth(String userId, DateTime time) at TestUserCenter.TestSiteService.GetUserCountAndFeeByMonth() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestSiteService.cs:line 191 6) Test Failure : TestUserCenter.TestSiteService.GetUserTradingInfo GetUserTradingInfo is null at TestUserCenter.TestSiteService.GetUserTradingInfo() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestSiteService.cs:line 232 7) Test Failure : TestUserCenter.TestUserService.申请贵宾服务功能已关闭 System.Exception was expected 8) Test Failure : TestUserCenter.TestUserService.GetUserSecurityLevel Expected: False But was: True at TestUserCenter.CqComp.ThanResults(Boolean ExpectedValues, Boolean TestResults) in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestTools\CqComp.cs:line 135 at TestUserCenter.TestUserService.GetUserSecurityLevel() in E:\EveryDayWork\2013\3\3-27\UserCenterTest\CQTest\CQTest\TestUserCentre\TestUserService.cs:line 5251 C:\tools\tomcat6\webapps\hudson-3.0.0\tempdir\jobs\UserCenter_TA\workspace>exit 8 Email was triggered for: Failure Sending email for trigger: Failure