• 单元测试(UnitTest)入门


    微软在VSTS(Visual Studio Team System)2005中集成了单元测试框架(Team Test),就是我们平时所说的单元测试(UnitTest)了。

    今天,就让我们通过一个简单的例子,来尝试一下UnitTest的魅力吧。

    首先,先建立一个例子项目。我们新建了一个叫UnitTest的Class Library项目(如下图)

    建立好例子项目后,我们就在默认的Class1类中增加一个叫GetNameById的方法。这个方法就是供我们进行单元测试的方法了。

    方法很简陋。。。但这不是重点。只要它是一个方法。能供我们测试就行了,对吧?下面我们开始进行对给方法的UnitTest了。在方法名称上面点击右键,选择“Create Unit Tests...”

    选择“Create Unit Tests...”后会弹出一个窗口,里面已经勾选好我们写的方法,我们就是要对该方法进行测试。所以勾选的地方不用动。需要注意的是,下边的Output project项默认是VB.net语言的。我们要将它改回C#的,因为我们用C#嘛。当然你用VB你可以选VB.net。

    点击OK,然后输入New Test Project Name,这里我们输入TestGetNameById:

    然后在Solution Explorer就多了个名为TestGetNameById的Test Project和一个叫Solution Items的Solution Folder。

    相关的文件作用如下:

    localtestrun.testrunconfig        本地测试运行配置文件;

    MySchoolPro.vsmdi                 测试管理文件;

    AuthoringTest.txt                   提供创建测试的说明,包括向项目增加其他测试的说明;

    Class1Test.cs                         包含GetNameById()的测试,以及测试初始化和测试清除的方法.

    打开Class1Test.cs文件,会发现一个叫GetNameByIdTest的方法。这个方法就是我们GetNameById方法的测试方法了。

    该方法定义了我们要测试的方法GetNameById的输入intId,默认值为0。期待输出expected,默认为null。actual为测试我们写的GetNameById方法实际得到的值。如果期望值expected和实际输出值actual一致。Assert是“断言”类,它判断测试是否成功。文后附有该方法的一些断言方法,如符合断言,那么系统就会认为测试通过。

    需要注意的是“Assert.Inconclusive("Verify the correctness of this test method.")”语句是表示这个测试是一个无法验证的测试,当我们完成了测试方法(填好了参数和期待值、比较方式)之后,需要把它屏蔽:

    当我们如上图修改好测试参数后。我们就点击菜单上的Test -> Windows -> Test View 打开Test View:

    在Test View的窗口可以看到GetNameByIdTest方法,在该方法上直接点右键,选择“Run Selection”即可运行测试。

    如果不选择“Run Selection”而选择“Debug Selection”的话,就可以在测试项目上加断点调试测试方法。这对于方法体比较复杂或者输入涉及数据库等操作的时候会很方便。

    运行“Run Selection”后可以看到以下输出窗口:

    看到了吗? Passed!我们成功了!

    至此,UnitTest的入门介绍告一段落了,你也算踏入了单元测试的门槛,至于它能发挥多大的作用,就看你自己以后的修为了。

    附送一些测试中的Assert的方法:

    Assert.AreEqual
    测试指定的值是否相等;如果两个值不相等,则测试失败。


    Assert.AreNotEqual
    测试指定的值是否不相等;如果两个值相等,则测试失败。
     
    Assert.AreSame
    测试指定的对象是否都引用相同的对象;如果两个输入内容引用不同的对象,则测试失败。
     
    Assert.AreNotSame
    测试指定的对象是否引用不同的对象;如果两个输入内容引用相同的对象,则测试失败。
     
    Assert.Fail
    断言失败。


    Assert.Inconclusive
    表示无法证明为 true 或 false 的测试结果。
     
    Assert.IsTrue
    测试指定的条件是否为 true;如果该条件为 false,则测试失败。
     
    Assert.IsFalse
    测试指定的条件是否为 false;如果该条件为 true,则测试失败。
     
    Assert.IsNull
    测试指定的对象是否为 空引用(在 Visual Basic 中为 Nothing);如果它不为空,则测试失败。
     
    Assert.IsNotNull
    测试指定的对象是否为非空;如果它为 空引用(在 Visual Basic 中为 Nothing),则测试失败。

    另外,代码覆盖率也是一个重要的指标,是指单元测试运行时,覆盖了多少代码。VSTS默认是没有打开代码覆盖率的。Team Test 包含了一个代码覆盖工具,可以详细解释被执行代码的覆盖率,并突出显示哪些代码被执行,哪些代码没有被执行。既然这个是我们这次第一次入门,就不详细介绍了。要深入了解的话就“找找看”吧,或者我们下一篇关于UnitTest的文章再介绍代码覆盖这个问题。

  • 相关阅读:
    阿里巴巴电商搜索推荐实时数仓演进之路
    阿里云发布边缘计算视频上云解决方案 为海量视图处理提供城市级云基础设施
    MySQL设置所有IP地址都可以访问数据库
    HTML5中的data-*属性和jQuery中的.data()方法使用
    21. 合并两个有序链表 *****
    链表相交
    链表的中间节点
    剑指 Offer 24. 反转链表 *****
    从尾到头打印链表
    返回倒数第k个节点
  • 原文地址:https://www.cnblogs.com/KenBlove/p/1273594.html
Copyright © 2020-2023  润新知