• C#,单元测试入门


    C#,单元测试入门

    C#,单元测试入门(以下内容可能来自网络)

    一、什么叫单元测试(unit testing)?

    是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函 数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中 要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

    C#中,一个方法,一个类,一个窗口的测试。即单元测试。

    二、为什么要进行单元测试。

    为了程序的正确性,尽早的发现程序的BUG,便于后期的开发及调试,维护。

    三、谁做这一工作?

    答案是:程序员自己,因为程序员才明白自己写的code,才知道要达到的效果。

    四、什么时候做?

    单元测试越早越好,早到什么程度?极限编程(Extreme Programming,或简称XP)讲究TDD,即测试驱动开发,先编写测试代码,再进行开发。在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。从经验来看,先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的直接返回一个合适值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。

    五、C#项目测试DEMO, 本demo用VS2015写。

    1、  新建一个控制台应用。名称叫:UnitTestDemo

     

    2、  写一个待测试的方法。

    复制代码

        public class Program
        {
            static void Main(string[] args)
            {
            }
    
            public static int Add(int pNum1,int pNum2)
            {
                return pNum1 + pNum2;
            }
        }

    复制代码

    3、  新建一个单元测试项目。名称叫:UnitTestDemoTest

     

    修改类名,及方法名。UnitTest1重命名为ProgramTest,方法名:TestMethod1改为:AddTest。

    这里说明一下,方法面上面的特性:[TestMethod]这是必须的。告诉编译器这是一个测试法式。

    写代码。调用要测试的方法。

    复制代码

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using UnitTestDemo;
    
    namespace UnitTestDemoTest
    {
        [TestClass]
        public class ProgramTest
        {
            [TestMethod]
            public void AddTest()
            {
                int a = 100;
                int b = 10;
                Assert.AreEqual(Program.Add(a, b), 110);
            }
            [TestMethod]
        }
    }

    复制代码

    4、  打开“测试资源管理器”,在“测试”->窗口->测试资源管理器

     

    可以看到目前还没有测试项目。

     

    现在去生成测试项目。

    再回来看。是不是多了一个测试

    ,在上面右击。选“运行选定测试”,

     

    可以看到前面多了一个通过标记。表示测试通过。

     

    如果未通过。是个红色的X,我们现在再写一个未通过的方法。

    注意方法的特性一定要加[TestMethod],然后生成应用,再去运行测试。

    复制代码

            public void AddTest2()
            {
                int a = 100;
                int b = 10;
                Assert.AreEqual(Program.Add(a, b), 50);
    
            }

    复制代码

     

    5、  回到主项目。看方法提示行。上面有标测测试通过。

     

    在方法上面有一个清楚的提示。

    这里说一下VS的强大功能。这个提示很好用。

    A、 可以提示方法的引用数量,并快速定位,

    B、 还可以提示单元测试的结果。

    C、 还可以提示源代码版本管理器,提交及修改的情况。

     

    6、  以上是手工建立测试项目的。还有一种快捷的方法建立测试项目。在要测试的方法行,右击。选择创建单元测试。可弹出建立单元测试对话框。

     

     六、现在说说单元测试里Assert这个类。

    (一)、Assert类的使用

    1、Assert类所在的命名空间为Microsoft.VisualStudio.TestTools.UnitTesting 在工程文件中只要引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll就可以使用 了。

    2、使用Assert类可以对特定功能进行验证,单元测试方法执行开发代码中的方法代码,但只有包含Assert语句时才能报告代码行为方面的内容。

    3、Assert在测试方法中,可以调用任意数量的Assert类方法,如Assert.AreEqual()方法。Assert类有很多方法可供选择,其中许多方法具有多个重载。

    4、使用CollectionAssert类可比较对象集合,也可以验证一个或多个集合的状态。

    5、使用StringAssert类可以对字符串进行比较。此类包含各种有用的方法。如:StringAssert.Contains、StringAssert.Matches和StringAssert.StartWith。

    6、AssertFailedException只要测试失败,就会引发AssertFailedException异常。如果测试超时,引发意外的异常,或包含生成了Failed结果的Assert语句,则测试失败。

    7、AssertInconclusiveException只要测试生成的结果是Inconclusive,就会引发 AssertInconclusiveException。通常,向仍在处理的测试添加Assert.Inconclusive来指明该测试尚未准备好, 不能运行。

    (二)、Assert类主要的静态成员

    1、 AreEqual:方法被重载了N多次,主要功能是判断两个值是否相等;如果两个值不相等,则测试失败。

    2、 AreNotEqual:方法被重载了N多次,主要功能是判断两个值是否不相等;如果两个值相等,则测试失败。

    3、 AreNotSame:引用的对象是否不相同;如果两个输入内容引用相同的对象,则测试失败.

    4、 AreSame:引用的对象是否相同;如果两个输入内容引用不相同的对象,则测试失败

    5、 Fail:断言失败。

    6、 Inconclusive:表示无法证明为 true 或 false 的测试结果

    7、 IsFalse:指定的条件是否为 false;如果该条件为 true,则测试失败。

    8、 IsTrue:指定的条件是否为 true;如果该条件为 false,则测试失败

    9、 IsInstanceofType:测试指定的对象是否为所需类型的实例;如果所需的实例不在该对象的继承层次结构中,则测试失

    10、 IsNotInstanceofType: 测试指定的对象是否为所需类型的实例;如果所需的实例在该对象的继承层次结构中,则测试失败

    11、 IsNull:测试指定的对象是否为非空

    12、 IsNotNull:测试指定的对象是否为非空

  • 相关阅读:
    LeetCode题解(2)-- Add Two Numbers
    LeetCode题解(1)--Two Sum
    STL review:vector & string & map & struct
    机器学习导论(一) 基本概念
    Single Number
    Single Number II
    Copy List with Random Pointer
    Word Break
    Populating Next Right Pointers in Each Node II
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/grj001/p/12225128.html
Copyright © 2020-2023  润新知