• 如何快速上手.net下单元测试工具NUnit?


    NUnit基本使用

    准备知识:

      读此博文需要了解单元测试基本概念及NUnit的的安装。

      传送门:单元测试之道(使用NUnit)

    1.常见的错误

    当学习一个新东西时,先学习错误,是最快的方式。

    1.1 构造函数错误。

    构造函数必须公开,无参,否则就会报错。
    后面我们会讲到如何使用带参构造函数。
     

    1.2 程序抛出异常错误。

    在测试的方法中,使用异常抛出也会报错。
    throw new ApplicationException("Intentional Exception");
     

    1.3 Assert.Fail方法抛出错误。

    示例:
     
    [Test]
    
    public void FailingTest()
    
    {
    
    // Assert.Fail方法可以抛出错误。
    
    Assert.Fail("Intentional failture");
    
    }
     

    1.4 方法带参数的错误。

    方法带参数一样会报错,这和构造的原理一致。
    后面会讲到如何调用带参的函数。
    示例:
    // 无法带参执行
    
    // 调用者为ut,参数没有提供
    
    [Test]
    
    public void NotRunnableTest(int a)
    
    {
    
    }
     
     

    1.5 函数访问级别的错误。

    不论函数还是类,访问级别都应该是public,否则会报错。
    示例:
     
    // 用于测试的方法必须是公开的
    
    // 无法进行测试
    
    // 可测试也会报错:method is not public 
    
    [Test]
    
    protected static void MockTest5()
    
    {
    
     
    
    }
     

    1.6 不确定错误Inconclusive。

    当不确定错误是否发生就可以使用,不确定错误。
    不过并不推荐使用。
    示例:
     
    // Inconclusive 不确定的结果
    
    [Test]
    
    public void InconclusiveTest()
    
    {
    
    Assert.Inconclusive("No valid data");
    
    }
     

    2.基本的使用

    2.1 添加描述信息

    在特性中添加Description参数可以给我们测试的功能添加描述信息。
    示例:
     
    [Test(Description = "Mock Test #1")]
    
    public void MockTest1()
    
    {
    
     
    
    }
     

    2.2.1 构造函数带参数

    为什么我们使用带参的构造函数会报错呢?
    对于这个类来说,调用者不是我们,而是NUnit。所以我们调用带参的构造函数而又没有给他参数,当然报错了。
    因此我们需要告诉NUnit参数。
    示例:
     
    // 构造带参数测试
    
    // 多个测试用逗号隔开
    
    [TestFixture(1),TestFixture(2)]
    
    public class ParameterizedFixture
    
    {
    
        public ParameterizedFixture(int num)
    
        {
    
     
    
        }
    
     
    
        [Test]
    
        public void Test1() { }
    
        [Test]
    
        public void Test2() { }
    
    }
     

    2.2.2 构造函数带泛型参数

    如果想添加泛型的参数怎么办?
    示例:
     
    // 泛型构造函数也能带参测试
    
    [TestFixture(1), TestFixture("a")]
    
        public class GenericFixture<T>
    
        {
    
            public GenericFixture(T obj)
    
        {
    
     
    
        }
    
        [Test]
    
        public void Test1() { }
    
        [Test]
    
        public void Test2() { }
    
    }    
     

    2.3.1 有参无返函数

    如何调用有参无返函数呢?
    示例:
     
    // 带参函数的测试 
    
    [TestCase(4), TestCase(0)]
    
    public void Test3(int num)
    
    {
    
    }
    想要多次测试可用逗号隔开。
     

    2.3.2 有参有返函数

    多了个返回值,怎么处理返回值呢?
    示例:
     
    // 带参带返回值的测试
    
    // 必须指定返回值,执行结果和返回值相等,才算正确。 
    
    [TestCase(1,1,Result = 3),TestCase(2,2,Result = 4)]
    
    public int MethodWithParameters(int x, int y)
    
    {
    
    return (x + y);
    
    }
    执行的时候把预期的返回值也告诉NUnit,如果返回值不对。测试同样无法通过。

    2.3.3 带泛型参数的函数

    示例:
     
    // 带参函数的测试
    
    // 泛型内置工具不识别,可以用 gui测试
    
    [TestCase(4, 4), TestCase("a", "b")]
    
    public void GenericMethod<T>(T x, T y)
    
    {
    
    }
     

    2.4 忽略测试。

    如果不想测试一个类或函数怎么做呢?
    示例:
     
    [Test,Ignore]
    
    public void Test1() { }
    只需要添加Ignore特性,告诉NUnit忽略掉就可以了。
     

    源码下载(含NUitNUnit-2.6.4 及相关文档):

  • 相关阅读:
    Django——缓存
    Django——中间件设置缓存
    Django——photo
    Django——权限
    ONVIF Event消息解析(How to work with gSoap)
    当OOP语言RAII特性发展到functional形式的极致
    探讨符号式未来,函数式语言//冒号说明法
    JavaScript 目标装配式编程(Target Assemble Programming)
    When Colon Scripting is comming(JavaScript语法扩充)
    When Colon Scripting is comming (脚本最佳体验)
  • 原文地址:https://www.cnblogs.com/simple-blog/p/4849661.html
Copyright © 2020-2023  润新知