学些了一段时间的单元测试(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>