标题：Nunit-Gui
NUnit-Gui
nunit-gui.exe是一图形运行器。它类似windows浏览器一样显示测试，并且提供一个测试成功或失败的可视化标记。它能够让你有选择性的运行单个测试或单个套件，并且当你修改以及编译你代码时它会自动重新加载。下面的截屏是nunit-gui正在运行与前面例子相同的mock-assembly.dll.
正如你所见，没有运行的测试标记为一个黄色的圆圈，而那些成功运行颜色为绿色。如果任何测试失败,他们会标记为红色。
NUnit属性  
TestFixture 属性
本属性标记一个类包含测试。做为一个测试的类，这个类还有一些限制:
1、必须是Public，否则NUnit看不到它的存在。
2、它必须有一个缺省的构造函数，否则是NUnit不会构造它。
3、构造函数应该没有任何副作用，因为NUnit在运行时经常会构造这个类多次。
Test 属性
Test属性用来标记一个类(已经标记为TestFixture)的某个方法是可以测试的。
1、测试方法必须为Public。
2、测试方法必须没有参数。
3、测试方法不返回任何参数。
SetUp/TearDown 属性
用于在测试开始时初始化，和测试后清除。标记为SetUp/TearDown 属性方法必须为public。
ExpectedException属性
这里是一个验证这个假设的测试。在这个属性里，你可以在执行过程中捕获你期望的异常类型。如果这个方法在没有抛出期望异常的情况下完成了，这个测试失败。使用这个属性帮助我们写程序员测试验证边界条件(Boundary Conditions)。
Ignore 属性
由于种种原因，有一些测试我们不想运行。当然，这些原因可能包括你认为这个测试还没有完成，这个测试正在重构之中，这个测试的需求不是太明确。但你有不想破坏测试，不然进度条可是红色的哟。怎么办?使用Ignore属性。你可以保持测试，但又不运行它们。
TestFixtureSetUp / TestFixtureTearDown属性
有时，一组测试需要的资源太昂贵。例如，数据库连接可能是一个关键资源，在一个test fixture的每个测试中，打开/关闭数据库连接可能非常慢。这就是我在开始提到的问题。
如何解决?NUnit有一对类似于前面讨论的SetUp/TearDown的属性: TestFixtureSetUp/TestFixtureTearDown。正如他们名字表明的一样，这些属性用来标记为整个test fixture初始化/释放资源方法一次的方法。
例如，如果你想为所有test fixture的测试共享相同的数据库连接对象，我们可以写一个打开数据库连接的方法，标记为TestFixtureSetUp属性，编写另外一个关闭数据库连接的方法，标记为TestFixtureTearDown属性。
Explicit属性
本属性忽略一个test和test fixture，直到它们显式的选择执行。如果test和test fixture在执行的过程中被发现，就忽略他们。所以，这样一来进度条显示为黄色，因为有test或test fixture忽略了。
Category属性
对于测试来说，你有的时候需要将之分类，此属性正好就是用来解决这个问题的。
测试生命周期
FixtureSetUp
SetUp
Test Method1
TearDown
SetUp
Test Method2
TearDown
FixtureTearDown
Assert Class
提供了一系列的 static methods，让你可以用来验证主要程序的结果与预期的是否一样。
常用的 Assert 断言有：
1、Assert.AreEqual(object expected，object actual[string message])：验证两个对象是否相等，如Assert.AreEqual(2，1+1);
2、Assert.AreSame(object expected，object actual[string message])：验证两个引用是否指向同一对象，如
object expected=new object();
object actual =expected;
Assert.AreSame(expected，actual);
3、Assert.IsFalse(bool)：验证bool值是否为false，如Assert.IsFalse(false);
4、Assert.IsTrue(bool)：验证bool值是否为true，如Assert.IsTrue(true);
5、Assert.IsNotNull(object)：验证对象是否不为null，如Assert.IsNotNull(new object());
6、Assert.IsNull(object)：验证对象是否为null，如Assert.IsNull(null);
NUnit使用方法
NUnit的官方网站下载地址为：www.nunit.org，如果是结合.net使用，最好下载win.net版。
在vs2005中新建一个class library工程，add 一个class，定义一个取数组最大值的函数，具体定义如下：
public class Class1
{
public int FindMax(int[] arr)
{
int i;
int max=arr[0];
for(i =1; i<arr.Length; i++)
{
if(arr>max)
{
max =arr;
}
}
return max;
}
}
第二步：就该编写test code了。add 一个新的class，命名为Class1Test。再编写code之前，需要给该工程添加一个NUnit的引用，具体为：右键点击 reference->add reference->选择nunit.framework，然后在Class1Test文件中添加一个引用：using NUnit.Framework。当然，添加引用的前提是已经安装了NUnit了。下面我们就可以开始code test了。
[TestFixture]
public class Class1Test
{
[Test]
public void FindMaxTest()
{
int[] arr1 ={ 1, 3, 10, 4 };
int[] arr2 ={ 3, 10, 4, 1 };
int[] arr3 ={ 1, 10, 4, 3 };
int[] arr4 ={ -1, -3, -5 };　　　　
Class1 myclass =new Class1();
Assert.AreEqual(10, myclass.FindMax(arr1));
Assert.AreEqual(10, myclass.FindMax(arr2));
Assert.AreEqual(10, myclass.FindMax(arr3));
Assert.AreEqual(-1, myclass.FindMax(arr4));
}
}
我们先来解析一下这个类吧：[TestFixture]是NUnit的一个重要的属性，可以说是NUnit的一个标记吧，它向编译工具“宣布”：我要测试啦。[Test]一般用在一个函数之前，而且这个函数必须是public类型，而且无返回值，即void。
类与测试类写完了。编译好之后，可以得到一个dll文件。
打开NUnit，点击file->open，选择刚刚编译的dll文件，这样就把文件加载到NUnit了，在它的界面的左边，我们可以看到刚才编写的测试函数FindMaxTest，选择工程项目，或是文件，或是测试函数，然后点击界面右边的Run，如果一路绿灯，测试通过！