• [翻译]NUnitDescription and Exception Attributes(十一)


    Description (NUnit 2.4)

    Description特性给Test, TestFixture or Assembly应用一个描述性文字。这些文字会显示在输出的XML文档中,在Test Property对话框也会显示。

    Example:

    [assembly: Description("Assembly description here")]
    
    namespace NUnit.Tests
    {
      using System;
      using NUnit.Framework;
    
      [TestFixture, Description("Fixture description here")]
      public class SomeTests
      {
        [Test, Description("Test description here")] 
        public void OneTest()
        { /* ... */ }
      }
    }
    View Code

    Note:Test and TestFixture特性支持一个可选的Description属性。Description特性应该使用到新的应用程序。如果同时使用,Description特性优先级高。

    ExpectedExceptionAttribute (NUnit 2.0 plus Updates)

    可以使用这种方式来指定一个测试用例抛出期望的异常。这个特性有一些列定位和命名参数,我们会根据它的目标来分开讨论。

    Specifying the Expected Exception Type

    初始特性是在NUnit2.0中引入,使用一个参数给出期望的精确的异常类型。例如:

    [ExpectedException( typeof( ArgumentException ) )]
    public void TestMethod()
    {
    ...

    从NUnit2.2.4开始,可以使用字符串的异常类型,避免定义程序集的引用。

    [ExpectedException( "System.ArgumentException" ) )]
    public void TestMethod()
    {
    ...

    以上两种例子实现相同的功能,只有抛出System.Argument异常的测试用例执行成功。

    Specifying the Expected Message

    NUnit2.1引入了一个包含两个参数的构造函数,指定异常的message属性文本。NUnit2.2.4之后,相同的扩展使用一个字符串参数到构造函数。在NUnit2.4中,这些参数标记为已过时,并提供一个命名参数来替代。

    // Obsolete form:
    [ExpectedException( typeof( ArgumentException ), "expected message" )]
    [ExpectedException( "System.ArgumentException", "expected message" )]
    
    // Prefered form:
    [ExpectedException( typeof( ArgumentException ), ExpectedMessage="expected message" )]
    [ExpectedException( "System.ArgumentException", ExpectedMessage="expected message" )]

    在NUnit2.4,除了精确的匹配还可以指定异常信息附加额外的测试,通过使用枚举类型的MatchType参数来实现,示例如下:

    public enum MessageMatch
    {
        /// Expect an exact match
        Exact,    
        /// Expect a message containing the parameter string
        Contains,
        /// Match the regular expression provided as a parameter
        Regex,
        /// Expect a message starting with the parameter string
        StartsWith
    }

    如果没有指定MatchType,会使用精确的匹配。

    Specifying a Custom Error Message

    在NUnit2.4,如果ExpectedException消息不满足则可以指定一个自定义消息,使用UserMessage参数:

    [ExpectedException( typeof( ArgumentException ), UserMessage="Custom message" )]
    public void TestMethod()
    {
    ...

    Handling the Exception in Code
     

    如果需要处理的异常太复杂,通常的做法是在测试代码中使用try/catch快来处理。作为替代,NUnit2.4允许调用一个方法来处理异常。在需要用相同的方式处理多个异常时特别有效。

    通常可以使用IExpectException接口来实现异常处理,示例如下:

    public interface IExpectException
    {
        void HandleException( System.Exception ex );
    }

    只有通过标记为ExpectedException来调用异常处理程序。如果代码中的异常类型等所有检查都通过,特性可以不指定任何参数就指出期望的异常。

    一个handler可以使用Handler参数指定给特定的方法

    [ExpectedException( Handler="HandlerMethod" )]
    public void TestMethod()
    {
    ...
    }
    
    public void HandlerMethod( System.Exception ex )
    {
    ...
    }

    这个技巧可以不实现IExpectException或者混合使用就可以使用。在后面的例子中,指定处理程序可以应用到任何指定了的方法,而一般的异常处理程序适用于指定了ExpectedException的其他方法。

    指定了之后,处理程序会坚持异常,并且断言相关的属性。在测试中的任何的失败结果信息会与其他断言保持一致的格式。

    ExpectedException

    namespace NUnit.Tests
    {
      using System;
      using NUnit.Framework;
    
      [TestFixture]
      public class SuccessTests
      {
        [Test]
        [ExpectedException(typeof(InvalidOperationException))]
        public void ExpectAnExceptionByType()
        { /* ... */ }
    
        [Test]
        [ExpectedException("System.InvalidOperationException")]
        public void ExpectAnExceptionByName()
        { /* ... */ }
      }
    }
    ※如果你觉得这篇文章不错,请点击推荐。如果你觉得我写的对你有用请关注我。
    作者:Max蚊子
    网站:feiger.cn         飞鸽博客,关注互联网、站长圈的程序员博客!
                 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Mysql 重置密码
    windows下如何安装和启动MySQL
    连接到 PostgreSQL 数据源(SQL Server 导入和导出向导)
    通过apt-get安装JDK8
    Windows 更快捷方便的安装软件,命令提示符上安装 Chocolatey
    Windows 的命令行安装Scoop程序管理工具
    CentOS 7更改yum源与更新系统
    Mysql 获取表设计查询语句
    坐标3度带与6度带的知识(转载)
    jQuery学习---第三天
  • 原文地址:https://www.cnblogs.com/kim01/p/3122609.html
Copyright © 2020-2023  润新知