C# 之在 VS 中实现单元测试

1 篇文章 0 订阅

1. 在 VS 中创建单元测试

1.1 步骤

vs 中,“右键” -> “创建单元测试”,然后按照默认的选项,直接点确定,便生成一个对应的 project。

这个 project 无论是命名控件还是类名,都充斥着<测试类>的气息。

1.2 值得一提的是

1)被测试的类必须为 public,这样测试类才能引用;同理,需要被测试的方法也要 public,如果不是 public,测试时先改成 public;

2)如果是在类里面,并且在方法外面,点的右键来创建单元测试,会自动生成类里面所有关键字为 public 的测试方法;

3)如果是在方法中右键,只生成该方法的测试方法。

2. 编写单元测试

2.1 步骤

1)编写测试代码,测试代码的功能就是去调用被测试的类的方法;

2)编写期望测试代码返回的结果;

3)比较测试代码返回的结果与我们人工编写的期望的结果,是否一致,一致则表示测试通过。

2.2 代码举例
namespace RentalMoive.Tests
{
    [TestClass()]
    public class CustomerTests
    {
        [TestMethod()]
        public void statementTest()
        {
            // 期望的结果
            string expected = "Rental Record for mao\n\tregular\t3.5\n\trelease\t15\n\tchildren\t4.5\nAmount owed is 23\nYou earned 4 frequent renter points";

            // 测试代码
            Customer ct = new Customer("mao");
            ct.addRental(new Rental(new Movie("regular", Movie.REGULAR), 3));
            ct.addRental(new Rental(new Movie("release", Movie.NEW_RELEASE), 5));
            ct.addRental(new Rental(new Movie("children", Movie.CHILDRENS), 5));

            // 运行测试代码返回的结果
            string actual = ct.statement();

            // 比较测试的代码的结果是否与期望的结果一致
            Assert.AreEqual(expected, actual);
        }
    }
}

3. 单元测试的作用

1)单元测试是重构的第一步,重构就可能犯错,而单元测试,可以让我们在出错时及时发现及时回头;

2)在重构之前,我们创建单元测试,编写:期望结果、测试代码、比较测试代码的结果和期望的结果,然后运行测试,测试通过则表示我们编写的没有问题,如果测试不通过会打印测试的结果和期望的结果;

3)注意代码覆盖率
例如:一个方法存在 switch 或 if/else 语句,你不能只测其中的一个分支,应该将所有分支都能运行到,这样才能最大可能避免 bug 被藏起来。

只有 Enterprise 版的 vs 有"分析代码覆盖率"的功能,community 和 Professional 没有。
.
查询覆盖率步骤:
a. 点击菜单 “测试”->“分析代码覆盖率”->“所有测试”;
b. VS 将会展示各个命名控件、类、方法的覆盖率统计;
c. 双击"未覆盖块"大于 0 的文件节点,代码窗口会定位到该文件;
d. 代码会有突出显示效果。有三种颜色各自代表:覆盖率(涉及、部分涉及、未涉及)区域,具体哪三种颜色,可点击菜单"工具"->“选项”->“字体颜色”,在右侧"显示项"查看
4)开始重构,我们每做一些修改,就应该跑一遍<运行测试>,频率尽可能的多一些,保证我们步子迈得不会太大,如果测试结果不一致,说明我们的修改存在问题,需要及时找出原因。

内容将同步到微信公众号:广州 WPF 开发

广州 WPF 开发.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值