비주얼 스튜디오 NUNIT의 환경의 사용 구성 .NET 연속 적분 유닛 테스트 유닛 테스트 장 소개

시리즈 카탈로그

단위 테스트 및 테스트 기반 개발 소개

단위 테스트는 무엇입니까

자동화 된 단위 테스트는 테스트를 위해이 하나의 단위의 최종 결과에 대한 몇 가지 가정 한 후, 작업 단위는 테스트중인 호출하는 코드의 조각입니다. 유닛 테스트는 거의 항상 사용하는 단위 테스트 프레임 워크는 기록됩니다. 단위는 빠른 실행, 쓰기 쉬운 테스트합니다. 단위 테스트, 신뢰성 읽을 수 및 유지 보수. 긴 제품 코드가 변경되지 않는 한, 단위 테스트의 결과가 안정하다.

특징 :

• 자동 반복 실행;

• 구현하기가 매우 쉽습니다;

• 다음날은 여전히 ​​이해가;

• 누구나 한번 키를 실행할 수 있어야합니다;

• 속도가 빨라야한다

• 결과는 안정적이어야한다;

• 완벽하게 제어 장치는 테스트하는 단계;

• (서로 독립적으로 테스트 실행의) 완전 고립;

단위 테스트는 명명

단위 테스트는 가독성에 큰 중점을두고, 그래서 우리는 이름에 어떤 노력을 지출해야하기 때문에 쉬운 단위 시험 방법의 이름은 주요 기능을 볼 수 있습니다 기본적으로, 갑자기을 이해 할 수 있습니다. 당신이 생각하는 경우 메소드 이름이 완전히이 표현할 수 없습니다 기능을 달성하기 위해, 당신은 추가 의견을 추가 할 수 있습니다. 이름을 권장 다음과 같이
Should_Return (던져) _result (예외) _IF을합니다 (때) 그러나

해야 하는가는 반환 또는 시험 방법은이 결과를 표시하는 데 필요한 조건을 표시하는 경우, 예상되는 결과를 반환하는 것입니다 던져, 그러나 추가 조건으로, 그 결과를 기대한다고 말했다.

통합 테스트는 무엇입니까

통합 테스트 작업 단위에서 수행되는 시험이 테스트가 완료된 시험 될 작업 단위의 제어 및 종속 장치의 사용 또는 시간, 네트워크, 데이터베이스, 또는 스레드 난수 발생기와 같은 실제 물체의 복수하지 않다 등등.

차별 단위 테스트 및 통합 테스트

단위 테스트 및 통합 테스트의 가장 큰 차이점은 다음과 같습니다 통합 테스트는 하나 이상의 실제 모듈, 통합 테스트 실행에 의존 할 때, 문제가 그렇게 결함의 근본 원인을 찾는 어디 있는지 즉시 확인할 수없는 실패의 경우 후 것 더 어렵다.

화신

테스트 주도 개발

전통적인 개발 프로세스

[점선은 선택적인 동작을 나타낸다]

화신

TDD 개발 과정

화신

由上面的两个图中可以看出TDD与传统开发模式的区别:先编写一个会失败的测试,然后创建产品代码,并确保这个测试通过,接下来是重构代码或者创建另一个会失败的测试。

单元测试框架作用

单元测试框架是帮助开发人员进行单元测试的代码库和模块。

Nunit单元测试框架使用

NUnit 是一套开源的基于.NET平台的类Xunit白盒测试架构,支持所有的.NET平台。这套架构的特点是开源,使用方便,功能齐全。很适合作为.NET语言开发的产品模块的白盒测试框架。
起初是从流行的Java单元测试框架JUnit直接移植过来的,之后NUnit在设计和可用性上做了极大地改进,和JUnit有了很大的区别,给日新月异的测试框架生态系统注入了新的活力。
如何在VS安装并运行呢?用Nuget是最方便的一种形式了,如下图:

화신
如果各位的visualStudio中安装有Resharper插件,则只需要安装红色部分框选的内容即可,如果没有安装也没有关系,可以使用VisualStudio自带的测试工具也是可以的,
以下讲解用的也是VisualStudio自带的测试工具.
需要注意的是如果使用VisualStudio自带的测试工具,还需要安装Nunit.Console

编写第一个单元测试

我们在刚才新建的项目中添加一个名为FirstUnitTest的项目
我们要引入using NUnit.Framework;方可使用Nunit
我们新建的第一个测试代码如下
화신
其中TestFixture注解标识这个类为单元测试类,如果没有此标识,则此类无法在单元测试工具中运行
方法上的Test注解标注此方法为一个单元测试方法,如果没有Test注解,则此方法在单元测试运行的时候将会被忽略掉
类注解和方法注解添加以后,单元测试就可以跑起来了.

运行第一个单元测试

使用VisualStudio自带单元测试工具运行

화신
如上图示,点击菜单栏的Test(测试)-Windows(窗口)-Test Explorer(测试浏览器)便可以在VisualStudio中打开测试浏览器,只要我们保存了项目,就可以在Test Explorer中看到刚才创建的单元测试了(刚创建的单元测试名为FirstUnitTest)
运行单元测试,我们点击Test Explorer中FirstUnitTest下的测试方法名,出现以下选项
화신
我们点击Run Selected Test(运行选中的单元测试)便可以运行这个单元测试了

화신

运行以后便可以在Test Explorer中看到结果了
单元测试图标含义
单元测试结果很容易根据图标看出来其含义,其中圆圈内一个红色X 号代表测试失败,需要处理,圆圈里一个绿色对勾 代表测试成功,菱形内一个蓝底! 号代表测试结果待定(单元测试没有运行的状态是待定)
除了这几个状态外还有一种状态是三角形内一个黄底感叹号 ,代表警示,后面会介绍这个状态.

单元测试状态查看

通过以上状态我们很清析地看到我们创建的单元测试失败了,我们点击这个单元测试,Test Explorer下面部分便会显示关于这次测试的基本信息
화신
我们从错误信息里可以看到错误原因是期待的结果True,实际上是False.如果测试过程中由于异常导致错误,StackTrace还会显示异常的堆栈信息.

小技巧-快速定位到错误方法:在实际工作中,随意项目的深入,测试方法会越来越多,我们写完一个测试方法后然后点击测试,这样不会有什么问题,然后实际情况是随着测试方法积累越来越多,我们日后要运行单元测试的时候往往是点击整个单元测试项目运行,这时候如果有错误我们虽然可以根据方法名定位到出错的测试方法,然而这样很不方便,我们这时候可以点击错误信息栏里的Source后面的蓝色文字,快速定位到测试出现错误的方法.
화신

很多时候我们只是查看一下这个面板,并不把鼠标移过来点击,更为快捷的定位到错误方法的的方式是我们选中测试方法后,直接按下快捷键F12,就直接进入到错误方法了

화신

上面的面板中展示有错误的信息,如果信息过长时在面板查看很不方便,这时候我们可以把它复制下来然后在自己喜欢的文本查看器中查看

화신

单元测试调试

通过以上状态我们知道我们的单元测试失败了,为什么会失败很简单3+4*5/2不等于0,但是很多时候有些结果不是这么显而易见的,我们需要借助单步调试来发现错误,如何对单元测试进行调试呢?
首先我们像普通调试一样设置一个断点,然后在Test Explorer中右击方法名,出现弹出菜单,这次我们选择Debug Select Tests(调试选择测试)

화신

此时我们会看到像我们普通调试一样,断点被击中

화신
我们可以在断点调试模式发现错误所在.
这里还有一点需要指出的是,单元测试的成功失败状态只是针对本次有效,如果关闭VisualStudio所有的状态又会变成待定状态,需要再次运行测试才会有成功,失败等状态.

使用Resharper运行单元测试

Resharper为VisualStudio的一个插件,集成了很多功能,其中包含单元测试运行功能.如果你的VisualStudio里安装的Resharper插件,也可以使用Resharper来运行单元测试,使用Resharper来进行测试测试比使用VisualStudio自带的单元测试工具更为方便.
如果安装了Resharper,VisualStudio的主菜单里会出现Resharper菜单,执行以下图示操作便可以打开Resharper Unit Test Explorer

화신

窗口和VisualStudio Test Explorer类似

화신

操作也和VisualStudio自带的Test Explorer操作类似,点击刚才新创建的FirstUnitTest类,便会出现以下菜单

화신

选择第一个Run Unit Test便会运行单元测试,点击Debug Unit Tests则会进入单元测试调试模式,和VisualStudio自带的测试工具操作类似.

화신

执行结果状态图标和Visual Studio自带的测试工具状态图标大同小异,很容易区分
一点很大的不同在于它的单元测试信息显示在右边,这样如果面板的宽度过小而错误信息过长就会出现如下图示情况

화신

基本上不可读

화신

我们可以通过如图示设置把它调到下面,这样就和VisualStudio自带的单元测试工具布局基本一样了

화신

同样可以点击蓝色或者青色文字快速导航到错误方法里.
同样,由于面板大小限制,如果错误内容信息过丰富查看起来不是很方便,VisualStudio自带的测试工具可以通过Copy All复制到剪切板,然而这个面板并没有,没有办法把错误记录复制出来吗,答案是有的.
我们右击方法名,便会出现下面一个级联菜单

화신

这里有导出Text,XML和HTML,导出到xml和html基本上不需要,只需要导出为Text即可,点击Export to Text出现如下对话框

화신

如果我们选择一个路径便会将错误导出,很多时候并不需要这么做,我们点击Copy to Clipborard把内容复制到剪辑板,便可以把它复制到自己喜欢的文本编辑器里查看了

Resharper测试技巧-状态过滤

当测试越来越多的时候,我们往往对整个测试项目进行运行,而不是像在开发阶段写一个运行一个,有人可能会有疑问,单元测试写的时候测试通过,以后再测会变成不通过状态吗,答案是肯定的.如果我们的单元测试中包含外部依赖(理想状态下不应该包含),往往外部依赖的变化会导致单元测试结果的变化.另外,单元测试编写的不恰当也会引起测试结果的变化.外部依赖的变化往往由于项目本身原因耦合度太高,一时又无法重构但仍然需要单元测试,这时候也可以勉强为之,然而不恰当的测试代码导致结果的不稳定是需要避免的.(最为常见的是日期中使用DateTime.Now由于Datetime.Now是变化的导致单元测试结果不可预测,这种情况是需要避免的.)
以上穿插的内容只是为了说明特定情况下单元测试的结果是会变的,因此不以为编写完测试方法后运行一遍成功就万事大吉.

如果测试方法很多,运行完以后出现多处错误,此时想要一个个找出失败的单元测试不是很方便,此时我们可以借助Resharper Unit Test Explorer中的测试状态过滤功能来过滤出所有的错误测试.

화신

如上图,我们点击上面工具栏里的错误图标,这时候Explorer里列出的全部都是错误测试.
需要注意的是,由于我们启用的过滤,一旦错误都解决以后,这里便没有错误测试可罗列,这时候这里变成一片空白,我们需要点击一下最左边所有测试图标把所有测试都显示出来

화신

Resharper测试技巧之类内部启用测试

이제 시험은 우리가 찾을 좋은 단위 테스트 방법은 테스트 탐색기 탐색기에서 매우 어려운 일이 아닙니다 쓰기하지만, 더 및 단위 테스트 방법을 더 빠르게 찾을 할 때 때 단지 좋은 쓰기, 여전히 상대적으로 작은 시작하는 방법은 매우 복잡한 일이
우리는 종종 내부 (ReSharper에서 단위 테스트 탐색기 또는으로 VisualStudio 테스트 탐색기가 아닌 윈도우 탐색기 나 다른 컨텍스트를 말합니다 따라, 여기 Explorer를) 메소드의 이름 아래로 복사 한 다음 익스플로러에 붙여 넣어야 당신이 .Resharper이 매우 친밀한 간단한 기능을 제공 밖으로 표시 할 수 없습니다 다른 방법을 삭제하지 않으면 무엇을 찾아 삭제도 시작한 후, 직접 탐색기에서 테스트를 찾을 필요없이 클래스에서 직접 단위 테스트를 시작할 수 있습니다 방법은 다음 실행합니다.

화신

테스트 주석과 방법, ReSharper에서 그것을 인식 할 수있을 때 도시 된 바와 같이, 이번에는 빨간색 상자 위의 그림과 같이 방법의 앞에 나타났다 음과 양 아이콘 선택한
다음 상황에 맞는 메뉴를 표시 할 아이콘을 클릭

화신

실행 테스트를 실행할 수 있습니다 클릭합니다.

화신

음과 양 작은 체크 표시의 오른쪽 아래 모서리에 녹색 아이콘이있을 것 성공적으로 런타임 테스트가 성공하면

모든 시험 방법의 음의 앞에 클래스 이름을 클릭하고 양 아이콘을 두 번 전체 클래스 작업 인 경우

화신

그런 다음 모든 뒤에 실행 및 디버그 테스트 또는 디버그를 실행하는 이러한 모든 방법을 나타내는 단어가 있습니다.

추천

출처www.cnblogs.com/tylerzhou/p/11280305.html