在单元测试上,我走了很多的弯路,我写这篇文章,希望其他的还没有找到单元测试的小伙伴能够了解一下单元测试,并且知道怎样使用,不用像我当初那样在走很多不必要的弯路。
大学毕业后,我进入的是一个小型的创业公司,也没得什么人来带自己,全靠自己胡乱生长,那个时候写项目,写完后就运行程序,然后到页面中看正确不正确,然后修改,再调试等,测试的成本很大,有时候运行出来感觉可以了,但是用户一用就会出现各种问题,那个时候就越来越感觉到测试的重要性,但是公司小,并没有专门的测试人员,或许说自己就是测试人员,自己写代码自己测试。我就想给自己的代码弄一个测试,那个时候我知道有单元测试这么一回事,但是并不知道怎么用。然后在网上查.net怎样使用单元测试,发现有很多的教使用单元测试的资料。也就跟着学了一些基础的单元测试使用方法
1:对需要测试的方法创建单元测试
创建成功后:
然后就是Assert的各种使用了。这么用了一段时间,发现这样用并不是很好用啊,因为我其实只想看看我这样写代码对没对,有没有返回我想要的结果。并不需要进行一次比较,而且我还需要连接数据库。当我再测试方法中调用连接数据库的方法的时候,就会出错,告诉我无法连接数据库。
后来才知道原来我的连接数据库语句配置在web.config中的,但是运行测试的时候是无法读取在web项目中的web.cofig的。读取的测试项目的配置文件,App.config. 只需要把web.config复制到测试项目中,修改名称为App.config即可
运行成功后,我需要看得到我运行的结果,用Console.WriteLine()可以查看输出结果
运行成功后点击下面的“输出”
到了这一步,我基本上就可以为我写的方法添加测试了,进一步保证我的代码的正确率。
但在不久后,我又遇到了一个问题。我在给我的Ajax中添加测试的时候,无法测试成功,因为它需要HttpContext对象。
这个地方需要一个HttpContext对象,而且我还要传递参数过去。首先我想到的是模拟一个httpContext对象,到时找到了很多的方法,但是看起来很复杂,不是需要使用插件,就是太难理解了(原谅我不够聪明而且比较嫌麻烦),后来一想,其实可以创建一个这个对象不就可以了。于是在网上找到了创建一个HttpContext对象的方法
这样传递了httpContext对象后,就可以直接测试了,而且能够获取到参数值
后来对方法进行了一下封装,方便调用
调用的时候
这些就是我现知道的单元测试的知识了。分享给大家,希望大家不要嫌弃。如果有更好的方法希望大佬赐教。
最后说一句:最近在使用mvc对控制器中的方法进行测试的时候,发现上面的这种创建HttpContext对象好像没得效果。感觉还是需要模拟器模拟一个。