命令行执行Nunit

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


 

<think>首先,用户的问题是:“我想验证NUnit测试用例中的断言是否正常执行且未抛出错误 请问NUnit assert executes without throwing errors”。这翻译成英文是:“I want to verify that the assertions in the NUnit test case execute normally without throwing errors. How to do that?” 用户提到NUnit,这是一个.NET的单元测试框架。用户想确认测试用例中的断言(如Assert.IsTrue, Assert.AreEqual等)是否执行而不抛出错误。 在系统级指令中,有引用:[^1]是关于NUnit的Assert类的,具体是Assert.IsNotEmpty和Assert.IsNaN。但用户的问题是关于断言是否正常执行而不抛出错误。 关键点: - 在NUnit中,断言如果失败会抛出异常,但NUnit框架捕获这些异常并将其标记为测试失败。 - 如果断言正常执行而不抛出错误,意味着断言通过,测试成功。 用户想知道如何验证断言是否执行而不抛出错误。这本质上是在问如何确保测试通过,因为如果断言通过,它不会抛出错误;如果失败,它会抛出错误。 所以,我需要解释: - 在NUnit测试中,断言执行时不抛出错误意味着断言条件为真。 - 如何编写测试用例来验证这一点。 步骤: 1. **理解断言行为**:在NUnit中,当断言失败时(如Assert.IsTrue(false)),它会抛出NUnit特有的异常(如AssertionException),但NUnit框架处理这个异常并报告测试失败。 2. **验证断言执行**:如果用户想确认断言是否执行(即代码执行到断言点),他们可以使用调试或日志。但更常见的是,确保测试通过。 3. **测试通过**:如果测试方法运行完成而没有抛出任何未处理的异常,并且所有断言通过,那么测试被视为通过。 回答结构: - 用中文回答,因为指令要求使用中文。 - 结构清晰:逐步解释。 - 生成相关问题。 - 添加引用标识:末尾自然地添加引用,如[^1]。 可能的回答: - 解释:在NUnit中,断言正常执行而不抛出错误意味着断言条件满足,测试通过。 - 如何验证:运行测试并检查测试结果。如果测试通过,则所有断言执行无误。 - 示例代码:提供一个简单的NUnit测试用例。 - 引用:使用提供的引用[^1],但需要相关。 引用[^1]的内容是:Assert.IsNotEmpty(nums); //true Assert.IsNaN。这似乎不完整,但意思是Assert.IsNotEmpty用于检查集合非空,Assert.IsNaN用于检查值是否为NaN。 在回答中,我可以引用这个来展示断言的使用。 生成相关问题: - 指令要求生成相关问题,基于用户查询。 相关问题: 1. 如何编写一个基本的NUnit测试用例? 2. NUnit中断言失败时会发生什么? 3. 如何调试NUnit测试以确认断言执行? 4. NUnit中的其他常用断言方法有哪些? 确保LaTeX格式:用户的问题中没有数学表达式,但如果有,我会用$...$或$$...$$。但这里可能不需要。 完整回答: - 先回答问题。 - 然后提供代码示例(如果需要)。 - 最后生成相关问题。</think>### 验证NUnit测试中断言是否正常执行而不抛出错误 在NUnit测试框架中,断言(如`Assert.IsTrue`、`Assert.AreEqual`等)用于验证测试条件。如果断言正常执行且未抛出错误,意味着断言条件满足(例如,检查的值符合预期),测试被视为通过。NUnit框架会自动捕获断言失败时抛出的异常(如`NUnit.Framework.AssertionException`),并将其报告为测试失败;反之,如果断言通过,则不会抛出错误,测试运行完成。以下是逐步说明如何验证这一点: #### 步骤 1: 编写测试用例 确保测试方法使用NUnit的`[Test]`属性标记,并在其中包含断言。断言执行时,如果条件为真,则正常继续;如果条件为假,则抛出异常(但NUnit会处理为失败)。 - **示例代码**:创建一个简单的测试,验证列表非空(引用自[^1]的`Assert.IsNotEmpty`方法)。 ```csharp using NUnit.Framework; using System.Collections.Generic; [TestFixture] public class NUnitTestExample { [Test] public void TestAssertExecutesWithoutError() { // 创建一个非空列表 List<int> nums = new List<int>() { 1, 2, 3 }; // 断言:检查列表非空(如果通过,则不抛出错误) Assert.IsNotEmpty(nums); // 正常执行时,无错误抛出 // 添加更多断言以验证其他条件 Assert.AreEqual(3, nums.Count); // 检查列表长度 } } ``` - **解释**: - 如果`nums`非空(条件为真),`Assert.IsNotEmpty`正常执行,不抛出错误。 - 运行测试时,如果所有断言通过,测试结果为“通过”,表明断言执行无误。 - 如果断言失败(如`nums`为空),NUnit会抛出`AssertionException`,但框架将其捕获并标记测试为失败(用户会看到错误报告)。 #### 步骤 2: 运行测试并检查结果 - **使用测试运行器**:在Visual Studio中,通过Test Explorer运行测试。如果测试通过(绿色勾号),则所有断言正常执行且未抛出错误。 - **命令行方式**:使用`dotnet test`命令运行测试,输出中显示`Passed`表示成功。 - **验证方法**: - 如果测试通过:断言执行无误。 - 如果测试失败:检查输出日志,定位哪个断言抛出了错误(NUnit会提供详细信息如行号和失败原因)。 #### 步骤 3: 处理潜在问题 - **确保断言不被跳过**:如果测试代码中有异常(如空引用异常),可能阻止断言执行。使用`try-catch`块确保所有代码路径被覆盖。 ```csharp [Test] public void TestWithErrorHandling() { try { List<int> nums = null; // 可能抛出 NullReferenceException,但这不是断言错误 Assert.IsNotEmpty(nums); // 如果nums为null,会先抛出异常 } catch (Exception ex) { Assert.Fail($"测试出错: {ex.Message}"); // 手动标记失败 } } ``` - **最佳实践**: - 使用NUnit的`Assert.DoesNotThrow`方法显式验证代码块不抛出异常(这间接确认断言执行)。 - 结合日志记录(如`Console.WriteLine`)在测试中添加输出,以跟踪断言执行点。 #### 为什么这有效 在NUnit中,断言本质上是条件检查:通过时不抛出错误,失败时抛出特定异常。但NUnit框架封装了异常处理,用户只需关注测试结果[^1]。如果测试通过,则断言执行成功;否则,需调试失败原因。 ### 相关问题 1. 如何在NUnit中测试代码是否抛出特定异常? 2. NUnit的`Assert.DoesNotThrow`方法如何使用? 3. 如何优化NUnit测试用例以提高覆盖率? 4. NUnit与xUnit等其他测试框架在断言处理上有何区别? [^1]: 引用自NUnit常用类(一)- Assert,示例展示了`Assert.IsNotEmpty`用于检查集合非空,以及`Assert.IsNaN`用于验证NaN值。测试通过时断言执行无误,失败时报告错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值