Mono 之 单元测试
在上一篇文章中,利用Mono运行时,将两个简单的控制台程序部署在了Linux上,并且顺利运行。在敏捷的时代,测试是必不可少的,接下来让我们看看Mono上的单元测试方案。
NUnit
测试最好能够在Linux平台下运行,也就是需要MonoDevloper的支持。Vs2010自带的单元测试框架是不能用了,替代方案之一就是大家众所周知的——NUnit。Mono支持Nunit的运行,在MonoDeveloper中也有对应的Nunit项目模板。
关于NUnit的简单使用:
NUnit使用Attribute来标记测试的用例:
TestFixture | 标识单元测试类 |
Test | 标识测试方法 |
TestFixtureSetup | 测试类的初始化方法 |
TestFixtureTearDown | 释放初始化方法的资源 |
Setup | 测试用例的初始化函数 |
TearDown | 测试用例的资源释放 |
在VS 2010 中配置NUnit
在Vs2010 的“扩展管理器”中联机搜索 “Visual NUnit 2010”插件, 这是一个NUnit的运行器。
安装好后在 “视图”-》“其他窗口” 可以打开该插件的界面(也可以直接按 Ctrl+F7)
我们继续以上一篇中的GeneratePrimes为例。在解决方案里新建一个类库项目,加入以下单元测试代码:
1 [TestFixture] 2 public class GeneratePrimesTest 3 { 4 5 6 7 8 [Test] 9 public void TestNullPrimes() 10 { 11 int[] nullArray = GeneratePrimes.PrimeGenerator.GeneratePrimeNumbers(0); 12 Assert.AreEqual(nullArray.Length, 0); 13 } 14 15 [Test] 16 public void TestMinPrimes() 17 { 18 int[] minArray = GeneratePrimes.PrimeGenerator.GeneratePrimeNumbers(2); 19 Assert.AreEqual(minArray.Length, 1); 20 Assert.AreEqual(minArray[0], 2); 21 } 22 23 [Test] 24 public void TestThreePrimes() 25 { 26 int[] threeArray = GeneratePrimes.PrimeGenerator.GeneratePrimeNumbers(3); 27 Assert.AreEqual(threeArray.Length, 2); 28 Assert.AreEqual(threeArray[0], 2); 29 Assert.AreEqual(threeArray[1], 3); 30 } 31 32 [Test] 33 public void TestCentPrimes() 34 { 35 int[] centArray = GeneratePrimes.PrimeGenerator.GeneratePrimeNumbers(100); 36 Assert.AreEqual(centArray.Length, 25); 37 Assert.AreEqual(centArray[24], 97); 38 } 39 40 41 42 43 }
因为使用NUnit项目所以我们还需要添加对其的引用。
在NuGet的包控制台中 输入PM> Install-Package NUnit 就可以添加引用(很方便吧!记得修改“默认项目” );
重新生成解决方案,然后 在Visual NUnit 中选择项目,点击RUN 就可以查看运行结果了。
将解决方案转移到MonoDevelop
将解决方案拷贝到Linux操作系统中(我这里使用的是Ubuntu 发行版),在MonoDevelop 中打开项目。
首先查看一下MonoDevelop中是否安装NUnitRunner。 在“帮助”菜单中选择“关于”-》“版本信息”。
如果没有需要在Ubuntu的软件中心,MonoDevelop 的附加组件里 “勾选” 然后更新组件即可。
选择单元测试项目, 将工具栏里的 Active Layout 修改为 unit Testing
右击单元测试项目 选择Run Item就可以看到测试结果了。
以上仅是简单的介绍了在Visual 下进行单元测试的一种,当然还有其他很多方法可以实现目的。