zoukankan      html  css  js  c++  java
  • 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:测试指定的对象是否为非空

  • 相关阅读:
    toj 2975 Encription
    poj 1797 Heavy Transportation
    toj 2971 Rotating Numbers
    zoj 2281 Way to Freedom
    toj 2483 Nasty Hacks
    toj 2972 MOVING DHAKA
    toj 2696 Collecting Beepers
    toj 2970 Hackle Number
    toj 2485 Card Tric
    js页面定位,相关几个属性
  • 原文地址:https://www.cnblogs.com/grj001/p/12225128.html
Copyright © 2011-2022 走看看