欢迎加入BIM行业开发交流1群 群号:711844216
一、背景
小伙伴们在使用C#的时候,可能会有单元测试的需要,本文就介绍如何在vs中使用单元测试。
二、基本认识
2.1什么是单元测试
单元测试是对类中方法正确性的测试。
- 针对类中的方法
- 正确性的测试
2.2为什么要进行单元测试
在我们写代码的时候,很多时候都要去判断一个函数写的是否正确,用单元测试,会很方便的帮助我们实现这个目标。
2.3如何进行单元测试
请小伙伴们参见本文第三部分
三、单元测试例子
3.1传统测试
我们为了验证类中某个函数的正确型,经常会用控制台去测试。
//传统测试方法,通过控制台测试增加函数是否相等
using System;
namespace ClassForTest
{
//传统测试方法
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
if (5 == myClass.Add(1, 4))
Console.WriteLine("函数正确");
else
Console.WriteLine("函数不正确");
}
}
public class MyClass
{
public int Add(int x, int y)
{
return x + y;
}
public int Multiply(int x, int y)
{
return x * y;
}
}
}
小伙伴们可以试想,如果我们这个时候,也需要对Multiply函数进行同时进行测试,那么主函数就要修改或者重新在一个类中写另外一个主函数。等函数多了时,这样会很麻烦。
这个时候,我们的单元测试兄弟,就登场了(大家欢迎)。
3.2单元测试实战
首先,需要测试的类,不变,就是上面中的MyClass类。
接着,我们在Vs中新建一个单元测试的项目,如下图
然后在这个单元测试项目中,vs会自动为我们生成单元测试的这个类
using ClassForTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestClass;
namespace UnitTestProject
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
//准备
MyClass myClass =new MyClass();
//设定测试用例
int a = 1;
int b = 2;
//执行要测试的程序
int actual = myClass.Add(a, b);
int excepted = 3;
//断言,看结果与预期结果是否一样
Assert.AreEqual(excepted,actual,"加法不正确,请核对");
}
[TestMethod]
public void TestMethod2()
{
//准备
MyClass myClass = new MyClass();
//设定测试用例
int a = 1;
int b = 2;
//执行要测试的程序
int actual = myClass.Multiply(a, b);
int excepted = 3;
//断言,看结果与预期结果是否一样
Assert.AreEqual(excepted, actual, "乘法不正确,请核对");
}
}
}
- 准备,这部分通常用于需要测试的类的实例化
- 设定测试用例,就是我们提供的测试的参数
- 需要测试的函数,就是我们上面类中的函数
- 断言(Assert),看结果与我们预期的结果是否吻合
到这里,我们的单元测试代码就写好了。接下来,我们开始测试。
在测试窗口中选中测试资源管理器。
然后在vs的左边,我们可以看到这个界面,鼠标放在我们需要测试的加法上,然后右键,运行所选测试
结果如下
可以看到测试通过。
接着对乘法进行测试
由于1*2为2,但是我们给的期待值是3,所以,测试不通过。
好了到这里,单元测试就给小伙伴们介绍完毕了。
四、注意事项
1.单元测试是软件开发中的一种思想,不止.net平台有,其他平台都有对应的框架,基本思想是一样的。
2.我们这个示例是在.net Framwork下面进行的,如果测试的类库是.net core的,那么我们的单元测试项目可以选为xUnit测试项目。
3.能否在单元测试中,像控制台一样使用 Console.WriteLine()输出结果呢?当然可以,如果单元测试代码中有Console.WriteLine(),那么在选中左侧单元测试的函数,在左下角会看到一个OutPut,然后点击它,就可以看到输出的结果了。
4.本篇文章只对一条数据进行了测试,在实际开发中,会需要对大量的数据进行单元测试,博主在下篇文章中将为小伙伴们介绍数据驱动单元测试的例子。
5.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出revit二次开发以及编程干货。