在做事前建立一个正确的观念,是非常重要的,很多公司只注意制度却忽略了这一点,我之前待过的三家公司,都没有自己的研发部门,大家写代码的时候都各自为战,效率和性能都无法保证,因为都只靠个人能力做事,这不是一种正确的方法。编码很重要的一件事情就是单元测试,但很多公司都忽略了。试想一下,我们写代码无非分三样:主流程、接口、实现类。主流程只是一个大的业务流程,不容易出错,而且在接口未实现前,我们可以写一个返回假数据的实现类,来先测试主流程。实现类才是具体业务,最复杂也最容易出错,这才是测试的重点。
如果仅凭个人的经验的话,开发从菜鸟到大神可能会经历以下阶段:
1、全部写完代码,再运行程序,进行整个集成测试
2、写完主流程和子函数后,再打断点,再远行程序,不断对各个模块单元测试,最后进行整个集成测试
3、先写完主流程,再接着测试主流程,然后写子函数,再用UnitTest测试项目单元测试子函数,最后再进行整个集成测试
上面的三种阶段很多人都会经历过,第二阶段跟第三阶段已经很接近了,但第三阶段比第二阶段效率要高很多,因为写完测试项目之后,就可以进行全面的自动化测试了。
好了,废话不多说,观念有了,我们现在要真正开始动手:
现在,我以C#项目测试为例,讲解一个简单的UnitTest测试例子,再看看,它是如何提高我们的测试效率的。
我们要实现一个功能:计算一个数组的最大值和最小值的和
先写主流程:
static void Main(string[] args)
{
IMaxValue mm = new test();
int[] list = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int max = mm.Max(list);
int min = mm.Min(list);
Console.WriteLine(max+min);
Console.Read();
}
这是我们写的初步接口:
interface IMaxValue
{
int Max(int[] list);
int Min(int[] list);
}
这
是实现类
public class MaxValue : IMaxValue
{
// 将要测试的方法
public int Max(int[] list)
{
if (list == null)
return -1;
int len = list.Length;
if (len == 0)
return list[0];
int i, max = int.MinValue;
for (i = 0; i < len; i++)
{
if (list[i] > max)
max = list[i];
}
return max;
}
public int Min(int[] list)
{
return 0;
}
}
然后我们要测试主流程,因此我们写一个假的实现类:
class test:IMaxValue
{
public int Max(int[] list)
{
return 9;
}
public int Min(int[] list)
{
return 1;
}
}
我们跑完主流程测试没问题后:
然后开始进行单元测试:
选择菜单》测试》新增测试》单元测试,添加自己的单元测试类:
选择对应的测试实现类:
我们修改测试方法的输入值和返回期望值:
最后,点击左上角的工具栏按钮就可以进行单元测试了
怎么样,是不是很方便,由最小的函数做起,可以保证你的项目代码的质量。
断言API
Assert类的静态方法如下,其中常用的包括AreEqual、AreNotEqual、AreSame、IsNull、IsTrue、Inconclusive和Fail
针对集合类型的断言方法:
针对字符串类型的断言方法: