NUnit (1)

上一篇 / 下一篇  2010-01-19 16:00:55 / 个人分类:UI Automation Testing

一步一步学NUnit(一)

 

单元测试基础知识

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。

执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。

当编写项目的时刻,如果我们假设底层的代码是正确无误的,那么先是高层代码中使用了底层代码;然后这些高层代码又被更高层的代码所使用,如此往复。当基本的底层代码不再可靠时,那么必需的改动就无法只局限在底层。虽然你可以修正底层的问题,但是这些对底层代码的修改必然会影响到高层代码。于是,一个对底层代码的修正,可能会导致对几乎所有代码的一连串改动,从而使修改越来越多,也越来越复杂。从而使整个项目也以失败告终。

而单元测试的核心内涵:这个简单有效的技术就是为了令代码变得更加完美。

NUnit介绍

NUnit 是一个免费开源的产品,它提供了一套测试框架和一个测试运行程序(testrunner)。

注意:test tunner 知道如何寻找具有 [TestFixture] 属性的类和类中的 [Test] 方法。

如何安装 NUnit

在官网下载NUnit,当前最新的版是2.4.8,我下的是NUnit-2.4.8-net-2.0.zip。

NUnit第一个演示

如果没有单元测试,我们普通的测试方法就像是Main方法一样,这样的测试是一个很邪恶的测试方法,花时间且很得到我们想要的结果。

那么,我们应该如何来用NUnit做单元测试呢?

我们新建一个项目:

引入NUnit.Framework,WatiN.Core引用

using System;
using System.Collections.Generic;
using System.Text;
using WatiN.Core;
using NUnit.Framework;

namespace NUnitStart
{
    [TestFixture]
    public class NUnitTest
    {
        IE ie;

        [SetUp]
        public void TestSetUp()
        {
           
        }


        [TearDown]
        public void TestCleanUp()
        {
            ie.Close();
        }

        [Test]
        public void Search_1()
        {

            //Open a new IE instance and browse tohttp://www.tudou.com
            ie = new IE("http://www.tudou.com");

            //Find the search textbox and input
            ie.TextField(Find.ByName("kw")).TypeText("神话");

            //Click search button
            ie.Button(Find.ByClass("gs_submit")).Click();

            //Verify search result
            Assert.AreEqual(true, ie.ContainsText("找到 神话相关视频"));


        }

        [Test]
        public void Search_2()
        {
            //Open a new IE instance and browse tohttp://www.tudou.com
            ie = new IE("http://www.tudou.com");

            //Find the search textbox and input
            ie.TextField(Find.ByName("kw")).TypeText("heroes");

            //Click search button
            ie.Button(Find.ByClass("gs_submit")).Click();

            //Verify search result
            Assert.AreEqual(true, ie.ContainsText("找到 heroes相关视频"));

        }
    }
}

在这里,我们要注意几点,NUnit测试用的类前面一定要加上[TestFixture],以表示这是NUnit测试类;测试方法一定是public的,且没有返回值。这里的TestFixture和Test都是NUnit的Attribute,下表给出了NUnit常用的Attribute:

Assert.AreEqual是断言,在测试框架中,断言是单元测试的核心,我们在测试中要对其程序断言。如果某个断言失败,方法的调用不会返回值,并且会报告一个错误。如果一个测试包含多个断言,那些紧跟失败断言的那些断言都不会执行,因此每个测试方法最好只有一个断言。 NUnit.Framework.Assert有23个重载方法,大部分的情况它都有考虑到,当然,不排除需要自己写一个复杂的断言方法。

另外,需要为test assembly 创建一个config file.比如test assembly名字是NUnitStart.dll,那config file的名字应取为NUnitStart.dll.config,并且config file应该跟该dll 在同一目录。config file的内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
   <sectionGroup name="NUnit">
    <section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/>
   </sectionGroup>
  </configSections>
  <NUnit>
   <TestRunner>
    <!-- Valid values are STA,MTA. Others ignored. -->
    <add key="ApartmentState" value="STA" />
   </TestRunner>
  </NUnit>
</configuration>

对Add()方法的单元测试代码已经完成了,接下来我们运行下载解压后文件夹中的nunit.exe,程序界面如图:

打开对话"File"/"Open Project..."对话框,或者按"Ctrl + O",把第二个单元测试项目NUnitStart生成的NUnitStart.dll加载进来:

我们点右边的"Run"按钮执行单元测试:

太棒了,绿色!通过!Keep the bar green to keep the code clean.

一个简单的单元测试过程就是这样的。


TAG:

 

评分:0

我来说两句

日历

« 2024-04-22  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 3547
  • 日志数: 6
  • 建立时间: 2010-01-19
  • 更新时间: 2010-03-01

RSS订阅

Open Toolbar