《构建之法》第二章 个人技术和流程

摘至 邹欣《构建之法》一书,以作学习之用

概述

一个团队需要一定的流程来管理开发活动,每个工程师在软件生命周期所做的工作也应该有一个流程,这一章会介绍PSP(Personal Software Pro-cess,个人软件开发流程)

单元测试

单元测试的作用:让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证


用VSTS写单元测试

例子:许多应用程序中都会用到“用户”这一类型,用户的标识通常是一个邮件地址。对应的单元测试该怎么写?我们来练习一下。首先创建了一个C#的类库(Class Library),并写了如代码清单2-1所示的代码

代码清单2-1

namespace DemoUser
{
    public class User
    {
        public User(string userEmail)
        {
            m_email = userEmail;
        }

        //user email as user id
        private string m_email;  
    }    
}

在单元测试中,VSTS自动为你生成了测试的骨架,但是你还是要自己做不少事情,最起码要把那些标注为//TODO的事情给做了(如代码清单2-2所示)。此时,单元测试还在使用Assert.In-conclusive,表明这是一个未经验证的(Inconclu-sive)单元测试

代码清单2-2

/// <summary>
/// A test for User (string)
/// </summary>
[TestMethod()]
public void ConstructorTest()
{
    // TODO: Initialize to an appropriate
    // value    User target = new User(userEmail);
    string userEmail = null; 

    // TODO: Implement code to verify target
    Assert.Inconclusive("TODO: Implement code to verify target");
}

简单修改之后,可以得到一个正式的单元测试,如代码清单2-3所示。
代码清单2-3

[TestMethod()]
public void ConstructorTest()
{
    string userEmail = "someone@somewhere.com"; 
    User target = new User(userEmail);
    Assert.IsTrue(target != null);
}
//我们还可以进一步测试E-mail是否确实保存在User类型中

从上面这个例子可以看到,创建单元测试函数的主要步骤是:

1. 设置数据(一个假想的正确的E-mail地址)
2. 使用被测试类型的功能(用E-mail地址来创建一个User类的实体)
3. 比较实际结果和预期的结果(Assert.IsTrue(target != null);)

现在可以运行单元测试了,同时可以看看代码覆盖报告(Code Coverage Report),代码百分之百地都被覆盖了。当然这时候的代码还有很多情况没有处理。例如,还没有:处理空的字符串,长度为零的字符串,都是空格的串……我们可以很快地复制/粘贴,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值