学些了一段时间的单元测试(NUnit),对于小型的项目还用得马马虎虎,觉得在界面跑单元测试还是很容易上手的.但是最近深入了解了一些关于单元测试的理论,知道一个好的单元测试并不是靠手动去执行的,而是应该自动的执行.为了学得更加专业点,同时也想看看这个代码的自动编译是怎么回事.最终牵涉到了NAnt.这个工具早已听说过,就是没有用过,还一直觉得用起来会很麻烦,毕竟用习惯了IDE.
简单学习了一下NAnt,发现这个工具似乎与NUnit有着紧密的相联,更觉得有趣的是NAnt以一种任务式的方式去执行项目编译,还不会暂很大内存,毕竟还是命令行工具.比起IDE编译时,那种近似死机的状态好(编译大项目).Nant的任务都配置在一个XML文件里,只要简单配置下,就可以执行N多项目的编译,之后还可以顺带执行其他程序.也许有人会说,这不就是批处理.理论上说批处理也可以编译N多文件,麻烦而已.不过,Nant的功能不仅仅是编译个项目,还附带有很多函数,深入研究的话,当作一门语言来学也不为过.
当然好的单元测试,自动执行只是其中一个条件,另外更需要有合理的测试用例,将继续学习.............
以下是*.build文件的内容,自动编译主项目和单元测试项目,最后自动执行单元测试.
*.build
1<?xml version="1.0" encoding="utf-8"?>
2<project name="MyProject" basedir="." default="run" xmlns="http://nant.sf.net/release/0.85/nant.xsd">
3 <!--依次配置主项目文件和测试项目的文件,及单元测试文件路径-->
4 <!--所有文件路径以文件*.build所在路径为根目录-->
5 <property name="MyProject.dir" value=".\MyProject"/>
6 <property name="MyProject.bin" value="${MyProject.dir}\bin"/>
7 <property name="MyProject.lib" value="${MyProject.dir}\lib"/>
8 <property name="MyProjectTest.dir" value=".\MyProjectTest"/>
9 <property name="MyProjectTest.bin" value="${MyProjectTest.dir}\bin"/>
10 <property name="MyProjectTest.lib" value="${MyProject.dir}\lib"/>
11 <property name="NUnit.exe" value=".\NUnit\nunit-console.exe"/>
12 <property name="MyProjectTest.nunit" value="MyProjectTest.nunit"/>
13 <!--执行任务-->
14 <target name="run">
15 <call target="BuildProject"/>
16 <call target="BuildProjectTest"/>
17 <call target="RunNunit"/>
18 </target>
19 <!--编译主项目-->
20 <target name="BuildProject">
21 <echo message="Building MyProject"/>
22 <solution configuration="Debug" outputdir="${MyProject.bin}">
23 <projects>
24 <include name="${MyProject.dir}\MyProject.csproj"/>
25 </projects>
26 <assemblyfolders basedir="${MyProject.lib}"/>
27 </solution>
28 </target>
29 <!--编译测试项目-->
30 <target name="BuildProjectTest">
31 <echo message="Building MyProjectTest"/>
32 <solution configuration="Debug" outputdir="${MyProjectTest.bin}">
33 <projects>
34 <include name="${MyProjectTest.dir}\MyProjectTest.csproj"/>
35 </projects>
36 <assemblyfolders basedir="${MyProjectTest.lib}"/>
37 </solution>
38 </target>
39 <!--执行单元测试-->
40 <target name="RunNunit">
41 <echo message="Executing Nuni Test"/>
42 <exec program="${NUnit.exe}">
43 <arg value="${MyProjectTest.nunit}"/>
44 </exec>
45 </target>
46</project>