命令行执行Nunit

时间:2022-10-11 18:18:08

与窗体界面比较,控制台界面有一些额外的选项。命令行必须一直指定一个或多个文件名。控制台界面会一直创建一个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