NUnit学习笔记之Mono篇

一、Mono简介
  Mono是由Novell公司开发的一款开源的.net程序运行平台。长期以来,.net因为有微软这棵大树,还是颇受推崇的,包括我个人也很推崇。不过由于不具备跨 操作系统平台的能力,比如说将程序由Windows移植到Linux上,因此也颇遭诟病。Mono所应对的正是这一情况。
  Mono不仅提供了基本的.net类库,还有自己的扩展。但Mono现在还很不完善,对中文支持也不好,甚至没有很好的开发工具,以致更多的时候只能用于技术尝试。不过Mono毕竟实现了.net程序跨平台,而且听说已经有成功案例了。现在Mono最新版本是1.1.8,可以从 http://www.mono-project.com/Downloads 上下载,我在当前的Windows XP操作系统中安装的就是这个版本(安装到了本机的C:/Program Files/Mono-1.1.8文件夹下,但没有安装.net环境)。该版本提供有C#和VB.net编译器mcs、mbas,还提供了一个XSP服务器,可以运行ASP.net程序。但这里将只会使到C#。
   二、NUnit简介
  NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从
www.nunit.org 网站上免费获得,最新版本是2.2.0。在下载时,会看到NUnit 2.2.0版有NUnit-2.2.0.msi、NUnit-2.2.0-mono.zip、NUnit-2.2.0-src.zip等三个文件的下载连接,这三个连接前边有说明,分别是win、mono以及src,这说明前两个文件分别是供.net平台和Mono平台使用的,而最后一个是源码。这里需要的是NUnit-2.2.0-mono.zip,而且该压缩包中已含有源码。下载NUnit-2.2.0-mono.zip后,将该文件解压备用,我解压到了自己机器的F:/NUnit-2.2.0-mono文件夹下。
   三、编写用于测试的类
  用于测试的类很简单,名为Book,只有id和name两个属性,这两个属性将分别用于两个用例当中。由于我没有在当前的系统中安装.net环境,自然也无法使用Visual Studio.net 2003、Delphi 2005和SharpDevelop这些开发工具,只好用记事本了。
  打开记事本后,首先将该文件保存,我保存在了本机的G:/MDZPCK/Mono/NUnit文件夹下,文件名Book.cs。然后输入代码,如下:
  using System;
  
  namespace NUnitCS
  
{
    public class Book
    {
      private string pid = null;
      private string pname = null;
      
      public string id
      {
        get
        {
          return pid;
        }
        set
        {
          pid = value;
        }
      }
      
      public string name
      {
        get
        {
          return pname;
        }
        set
        {
          pname = value;
        }
      }
    }
  }
至此,用于测试的类编写完成了。
   四、编写测试用例
  这里只用了一个类进行测试,名为BookTest,以前这样的类可能需要继承NUnit.Framework.TestCase类,但现在只需要对该类使用TestFixture属性进行标识即可,而无须继承了。BookTest类包含两个用例,分别对应该类的testId和testName方法,即每个方法实现了一个测试用例。注意,在NUnit中,这些用来实现测试用例的方法有两种手段进行标识:一个是以testXXX的格式来命名,一个是使用Test属性进行标识。此外,BookTest还有Init和Dispose这两个方法,并分别使用TestFixtureSetUp和TestFixtureTearDown属性来进行标识,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。注意,这两个方法的名称并没有什么限制,但必须用TestFixtureSetUp和TestFixtureTearDown属性进行标识。下面开始编写BookTest。
  在记事本中新建文件,与Book.cs保存在同一目录下,文件名BookTest.cs。然后输入代码,如下:
  using System;
  using NUnit.Framework;
  
  
namespace NUnitCS
  {
    [TestFixture]
    public class BookTest
    {
      Book book = null;
      
      
[TestFixtureSetUp]
      public void Init()
      {
        Console.WriteLine("测试开始!");
        book = new Book();
        Console.WriteLine("book对象被初始化!");
      }
      
      [Test]
      public void testId()
      {
        book.id = "001"; //设置id属性的值为001
        //使用Assert查看id属性的值是否为001
        Assert.AreEqual("001", book.id);
        Console.WriteLine("id属性被测试!");
      }
      
      [Test]
      public void testName()
      {
        book.name = "ASP"; //设置name属性的值为ASP
        //使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试
        Assert.AreEqual("JSP", book.name);
        Console.WriteLine("name属性被测试!");
      }
      
      [TestFixtureTearDown]
      public void Dispose()
      {
        Console.WriteLine("book对象将被清理!");
        book = null;
        Console.WriteLine("测试结束!");
      }
    }
  }
   这里Init和Dispose方法没什么好说的,就是执行了对book对象的初始化和清理,不过testId和testName需要说明一下。前者是在对book的id属性进行测试,首先赋值为"001",然后使用Assert的AreEqual方法查看id属性中存放的值是否是期待的值,由于我的期待值也是"001",所以执行后这个用例应该是成功的;后者则是对book的name属性进行测试,也是首先赋值为"ASP",然后使用Assert的AreEqual方法查看其值是否是期待的,由于我特意将期待值设定为根本不可能的"JSP",因此这个用例执行后会出现一个错误。但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值,如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。
  下面简单介绍一下上边用到的静态类NUnit.Framework.Assert。该类主要包含6个方法:
  1.AreEqual()方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的Equals()方法类似;
  2.IsFalse()和IsTrue()方法,用来查看变量是是否为false或true,如果IsFalse()查看的变量的值是false则测试成功,如果是true则失败,IsTrue()与之相反。
  3.AreSame()方法,用来比较两个对象的引用是否相等,类似于通过"Is"或"=="比较两个对象;
  4.IsNull()和IsNotNull()方法,用来查看对象是否为空和不为空。
下面,还需要用记事本再编写一个文件,该文件中将包含main函数,以做为程序的入口点,我将该文件保存为Class1.cs。代码如下:
  using System;
  
  namespace NUnitCS
  {
    class Class1
    {
      static void Main(string[] args) {}
    }
  }
至此,编码完成。
  下面用Mono提供的mcs来编译程序。不过在编译之前,请确认安装目录下的Mono安装目录(我的安装目录是C:/Program Files/Mono-1.1.8)下的bin文件夹是否被配置到了环境变量path中。虽然这不是必须的,但编译程序时会方便一点。配置好后,打开命令行工具,将路径定位到保存源码文件的文件夹下,然后运行如下命令:

mcs -r:nunit.framework.dll -out:NUnit.exe Class1.cs Book.cs BookTest.cs

如下图所示:

   这里第一行命令对环境变量path做了临时配置,以防有人不会配置。不过这么做只是临时的,关掉命令行窗口后该配置就会遗失,但也没办法,要是通过"我的电脑"来配置,演示起来太麻烦了。下面简单介绍一下这里所执行mcs命令:
  1. 参数-r,用来调用动态连接库。这里调用的nunit.framework.dll是前面的编码中用到的NUnit类库,由Mono 1.1.8自带,版本2.2.0。
  2.参数-out,要输出的文件的名字,需要加扩展名。
执行后,在保存源码的文件夹下生成一个名为NUnit.exe的可执行文件。
五、运行NUnit
  编码完成后,就可以使用NUnit进行测试了。由于NUnit-2.2.0-mono.zip压缩包中只带有一个nunit-console.exe文件,因此我们只能使用命令行来进行测试了。首先将NUnit.exe文件拷到NUnit解压目录的bin文件夹下,我的NUnit解压目录是F:/NUnit-2.2.0-mono。然后打开命令行工具,定位到F:/NUnit-2.2.0-mono/bin文件夹下,执行如下命令:

mono nunit-console.exe NUnit.exe

执行结果如下:

   由于我当前的操作系统中没有.net环境,因此只能通过mono命令来执行。从图中基本可以看出执行的效果,其中有很多问号的部分就是在代码中做的输出,造成此种情况的原因是由于mono对中文支持较差。紧跟着就是测试的统计信息及错误汇报了。
   六、小结
  虽然现在的Mono还很弱小,但我个人对Mono很看好,毕竟Mono除了可以跨平台,还支持多语言。不要以为Mono仅仅只提供了mcs和mbas编译器,由于与.net标准兼容,因此我们其实还有更多的选择。但任何事物也不是一蹴而就的,Java能有今天也要走过十年,而.net则更是由于有微软这棵大树,因此对于Mono,将会有更多的期待。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动测试工具是软件开发过程中的重要组成部分,它能够帮助开发人员和测试人员自动执行测试用例,提高测试的效率和准确性。本实验的目的是熟悉一些常用的自动化测试工具,包括nunit、junit和vs2010。 nunit是一个用于测试.NET应用程序的开源单元测试框架,它提供了丰富的API和工具来编写和运行单元测试。对于.NET开发人员来说,nunit是一个非常实用的工具,它可以帮助开发人员自动执行单元测试,并生成详细的测试报告。通过使用nunit,开发人员可以更早地发现和修复代码中的问题,加快开发过程。 junit是一个用于测试Java应用程序的开源单元测试框架,它提供了一组用于编写和执行单元测试的API和工具。与nunit类似,junit可以帮助开发人员自动执行单元测试,并生成详细的测试报告。使用junit,开发人员可以更加准确地测试他们的代码,并通过快速发现和修复问题来提高代码质量。 vs2010是微软的一款集成开发环境,它提供了一套用于测试和调试的工具。通过使用vs2010,开发人员可以轻松地创建和运行单元测试,并通过调试工具来分析代码的执行过程。vs2010还提供了丰富的功能,如代码覆盖率分析和性能分析,帮助开发人员进行更全面的测试。 通过本实验,我们可以学习和熟悉这些自动化测试工具的基本用法和功能,并掌握如何使用它们来进行有效的测试。这对于提高软件开发和测试的效率和质量都具有重要意义。在实践中,我们可以通过编写和执行一些简单的测试用例,来验证这些工具的功能和性能。同时,我们还可以学习如何编写高质量的测试用例,以及如何生成和分析测试报告,以进一步提高测试的准确性和有效性。 总之,熟悉和掌握自动化测试工具的使用对于软件开发和测试人员来说是非常重要的。通过本实验,我们可以提高对nunit、junit和vs2010等自动化测试工具的了解和应用能力,从而在实际的开发和测试工作中更好地利用这些工具,提高工作效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值