|   1实验目的 
                         
                        了解持续集成的概念和方法,掌握DailyBuild及其相关工具的使用。  
                        2 环境  
                        Microsoft Visual Studio.NET 2005  
                        3 所需软件列表  
                        3.1 CruiseControl.NET version 1.1;  
                        项目监控工具。  
                        3.2 Nant version 0.85;  
                        基于.NET的自动化编译工具。  
                        3.3 Nant Contrib;  
                        增强Nant的工具。  
                        3.4 NUnit version 2.2.8 for .NET 2.0;  
                        单元测试的一个比较优秀的工具。  
                        3.5 NUnit2 Report version 1.2.2;  
                        将NUnit生成的XML文件“样式”成HTML文件的一个小工具。  
                        3.6 FxCop version 1.35;  
                        代码规范检查工具。  
                        3.7 Microsoft Visual Source Safe .NET 2005  
                        版本控制工具。  
                        4 过程和步骤  
                        4.1安装上述软件  
                        程序运行总框架如下图4.1。  
                          
                        图4.1  
                        说明:  
                        CC.Net 监控VSS里的变化,如果发现有变化,CC.Net立即调出NAnt将最新改动的VSS里的数据拷贝到本地并且进行编译,将结果输出.生成DLL程序集或者EXE可执行文件.NAnt将得到的将要执行单元测试的程序集DLL文件交给NUnit检测并且生成XML文件(为了方便我在这里又将XML文件”样式”成HTML文件,打开即以图形方式查看)。 
                          并且将得到的程序集交给FxCop检查,并生成XML文件,检查编码是否规范. 只要将CC.NET打开,并且设置好配置文件,这一切就是自动化的,需要的只是你的眼睛来看结果而已。 
                         
                        4.2建立两个工程  
                        4.2.1待测项目  
                        新建Student类库项目,使之生成Student.dll程序集。源码如下: 
                        student.cs  
                        
                           
                             using System; 
using System.Collections.Generic; 
using System.Text; 
namespace Student 
{ 
public class Student 
{ 
private string name; 
private int age; 
public Student() 
{ } 
public Student(string sname, int sage) 
{ 
Name = sname; 
Age = sage; 
} 
public string Name 
{ 
get 
{ 
return name; 
} 
set 
{
name = (string)value.Trim(); 
} 
} 
public int Age 
{ 
get 
{ 
return age; 
} 
set 
{ 
int v = value; 
age = v > 0 ? v : 0; 
} 
} 
} 
} 
using System; 
using System.Collections.Generic; 
using System.Text;
 | 
                           
                         
                        4.2.2测试项目  
                        新建一个类库项目,命名为 StudentTest,使之生成 Test.dll单元测试程序集。在引用里将nunit.framework.引用进来。 
                         
                        StudentTest源码如下:  
                        studentTest.cs  
                        
                           
                             namespace Student 
{ 
using NUnit.Framework; 
[TestFixture] 
public class StudentTest 
{ 
[Test] 
public void RunTest() 
{ 
Student s = new Student("Wang", 20); 
Console.WriteLine("Student " + s.Name + "'s age is " + s.Age); 
} 
} 
} 
 | 
                           
                         
                        界面如图4.2.2所示。  
                          
                        图4.2.1  
                        编译生成 Test.dll程序集(作为单元测试用)。  
                        打开Nunit,将Test.dll添加到Nunit中,并且点击Run,则会得到如下图4.2.2所示。 
                         
                        4.3建立vss数据库  
                        建立新用户:tanqiyu; 密码:123; 并建立新数据库:datebase  
                        之后,把待测程序check in到数据库中去,如图4.3。  
                          
                        图4.2.2  
                          
                        图4.3  
                        4.4 配置nant 的 default.build 文件  
                        添加环境变量:将 D:\Student\nant-0.85\bin;C:\Program 
                          Files\Microsoft FxCop 1.35 加入到环境变量path中去。  
                        建立default.build文件,供nant调用:  
                        
                           
                             <?xml version="1.0" encoding="gb2312" ?> 
<project name="TestRemote" default="run"  basedir="."> <property name="Solution.Filename"  value="D:\Student\Student\StudentTest\StudentTest.cs" />  <property name="Solution.Configuration" value="DEBUG" />  <property name="Build.OutputFolder" value="D:\Student"/>  <property name="Solution.Filename1" value="D:\Student\Student\Student\Student.cs" />  <property name="Solution.Configuration1" value="DEBUG" />  <property name="Build.OutputFolder1"  value="D:\Student"/>  <target name="t1"> <vssget user="tanqiyu" password="123" 
localpath="D:\Student" dbpath="D:\datebase\srcsafe.ini"  path="$/" /> </target>  <target name="t2" depends="t1">  <csc target="library" output="Student.dll"debug="true">  <sources>  <include name="D:\Student\Student.root\Student\Student\Student.cs" />  </sources>  </csc>  <csc target="library" output="StudentTest.dll" debug="true">  <sources>  <include name="D:\Student\Student.root\Student\StudentTest\StudentTest.cs" />  </sources>  <references>  <include name="C:\Program Files\NUnit-Net-2.0 2.2.8\bin\nunit.framework.dll" />  <include name="D:\Student\Student.dll"/>  </references>  </csc>  </target>  <target name="run">  <call target="t1" />  <call target="t2" />  <call target="nunit" />  <call target="fxcop" />  </target> <target name="nunit" depends="t2">  <nunit2>  <formatter type="Plain" />  <formatter type="Xml" usefile="true" extension=".xml" outputdir="."  /> <test assemblyname=" D:\Student\Student\StudentTest\bin\Debug\StudentTest.dll" />  </nunit2>  <nunit2report todir="D:\Student">  <fileset>  <include name="StudentTest.dll-results.xml" />  </fileset>  </nunit2report>  </target>  <target name="fxcop">  <exec program="fxcopcmd" commandline="/f:D:\Student\Student.dll /o:test.xml" />  </target>  </project>    | 
                           
                         
                        Nant运行结果如下图:  
                          
                        图4.4.1  
                        构建成功后,察看各个结果:  
                        (1) StudentTest.dll-results.xml:为Nunit生成的xml文件。  
                        (2)Index.html: 是将test.dll-results.xml”样式“成 html的结果。 
                         
                        (3)StudentTest.xml: 为 FxCop生成的代码规范检测文件  
                        4.5 配置CC.NET的ccnet.config文件  
                        
                           
                             <cruisecontrol><project name="Student">  <webURL>http://localhost/ccnet</webURL>  <triggers>  <intervalTrigger seconds="5"/>  </triggers>  <sourcecontrol type="vss" autoGetSource="true">  <ssdir>D:\datebase</ssdir>  <executable>C:\Program Files\Microsoft  Visual SourceSafe\ss.exe</executable>    | 
                           
                         
                          
                        图4.4.2  
                          
                        图4.4.3  
                        
                           
                             <project>$/</project>  
                              <username>tanqiyu</username>  
                              <password>123</password>  
                              </sourcecontrol>  
                              <tasks>  
                              <nant>  
                              <executable> D:\Student\nant-0.85\bin\nant.exe</executable> 
                               
                              <baseDirectory>D:\Student</baseDirectory> 
                               
                              <buildFile>default.build</buildFile> 
                               
                              <targetList>  
                              <target>run</target>  
                              </targetList>  
                              <buildTimeoutSeconds>280</buildTimeoutSeconds> 
                               
                              </nant>  
                              </tasks>  
                              <modificationDelaySeconds>15</modificationDelaySeconds> 
                               
                              </project>  
                              </cruisecontrol>  
                                | 
                           
                         
                        运行cc.net结果如下图4.5所示。  
                          
                        图4.5  
                        至此,持续集成环境搭建成功。  |