把 NUnit 源代码导入到项目中
NUnit 是一个单元测试框架,专门针对于.NET来写的。除此之外还有 JUnit(Java),CPPUnit(C++),它们都是xUnit的一员。最初,它是从 JUnit 而来。接下来我所用的都是基于这个版本。写这篇文章时, NUnit 已经更新到 3.10.1版,可以从GITHUB上直接下载各种发布版和源代码。
对于包括NUnit在内的内款流行的单元测试框架,网上有很多介绍,这不在我这篇文章讨论范围之内。
我这里要尝试的是把这个开源项目的源代码导入到我自己的项目中来。如果要使用这个项目的功能,只要直接引用解决方案中的项目就行了。(这可能是我的强迫症犯了)
下载源代码
GIT仓库网址:https://github.com/nunit/ (别说不知道GIT,赶紧去学习一下这个)
现在是有6个项目:nunit,nunit-console,docs,nunit3-vs-adapter,nunit-vs-adapter,governance。需要下载第一项,说明是 NUnit 3.0 Framework,也可以直接到上面的网址直接下载3.10.1的 release 页面下载,这样也就不用找 Branch 了。第一次我下载的是 adapter ,后来才发现这是一个让测试信息能够整合到VS的单元窗口里的适配器,它不能单独工作,必须下载nunit.framework。
编译测试
使用VS2017直接打开项目根目录中的nunit.sln,不出意外不用任何修改直接F6可以编译通过。之后,根目录中会出现BIN文件夹,里面有8个版本的DLL文件。如果右键项目,可以看到弹出菜单中有直接编辑csproj文件的选项,通过现象可以知道这个是.Net Standard的类库项目。是通过<TargetFrameworks>netstandard2.0;net40</TargetFrameworks>
的方法进行条件编译的。(这里多记录一下,如果是单框架编译需要使用TargetFramework,注意没有复数s)
导入源代码
多了不说,我们需要的代码都在nunit-3.10.1\src\NUnitFramework\framework目录里,其它的目录除了简化版目录就是单元测试目录了,还有一个MOCK的我没接触过,不管了。
到自己的项目(我建的是WinForm项目)里面导入现有项目。编译…
- 出现了CS0579错误
原因是当创建 .NET Core/Standard 2.0项目时,VS不会像.NET Framework项目一样自动生成AssemblyInfo.cs文件。而是会自动填写“程序集信息”而引起的,这个信息在项目属性页里打包标签(英文版好像是Package)中设置。自动填写了一份,又在项目中存在AssemblyInfo.cs文件,这个文件又设置了一次,所以是Duplicate ‘AssemblyXXXXXXAttribute’ attribute错误。
第1种解决方法是:删除自己的 AssemblyInfo.cs,这就没办法通过编程方式设置程序集信息了。
第2种解决方法是:编辑项目的csproj文件,在PropertyGroup标签中添加元素
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
第2.5种方法(改进一点而已):AssemblyInfo.cs文件是由Microsoft.NET.GenerateAssemblyInfo.targets控制生成的,分析一下就可以修改一下上面添加的元素,采用逐一控制的方法,如
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
……
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>