zoukankan      html  css  js  c++  java
  • 在NANT使用Nunit2标签运行Nunit测试

    在NANT使用Nunit2标签运行Nunit测试

    起因

    项目中一直使用nunit,近期发现利用脚本在运行测试时偶尔出现nunit的socket error,很影响大家的情绪,于是到网上查了一下,没有什么好的解决方法。于是换个思路,看能不能换一种方式运行测试,一般来说,.Net平台下运行Nunit测试有两种方式

    • Nunit自带的runner,比如nunit-console-x86.exe,使用命令行运行exe,然后将测试dll作为参数传入
    • Nunit2,是Nant引入的新标签,可以脱离nunit的runner单独运行

    本文介绍如何使用Nunit2标签运行测试dll。

    XML配置文件

    根据Nant的帮助文档,我们可以大致了解如何配置nunit2标签,我不得不说nant的帮助文档过于简陋,其中有很多东西都是我读nant源码发现的。配置完的XML如下:

    <?xml version="1.0" encoding="utf-8"?>
    <project name="Test" default="RunUnitTest">
        <target name="RunUnitTest" >
            <nunit2>
                <formatter type="Xml" usefile="true" extension=".xml"/>
                <formatter type="Plain" />
                <test>
                    <assemblies basedir="bin\Debug">
                        <include name="*UnitTest.dll" />
                    </assemblies>
                </test>
            </nunit2>
        </target>
    </project>

    上面的XML中,需要注意的是

    1. 配置了两个formatter,因为plain输出在控制台上,xml则会生成测试报告
    2. <assemblies>中的basedir是根据该XML文件的相对路径
    3. <nunit2>默认的属性failonerror为true,也就是说当有测试失败时,整个target也会失败
    4. 参考帮助文档,<nunit2>中的属性verbose会输出详细信息,我配置了一下却不工作,读了源码后发现代码里根本没有用到

    对测试代码的影响

    在切换为Nunit2标签后,你需要对你的测试代码进行一些调整

    ExpectedException

    请看下面的测试

    [Test]
    [ExpectedException(typeof(Exception))]
    public void should_throw_exception()
    {
        throw new Exception();
    }

    使用Nunit2标签后运行时会报出现Exception,也就是它没有识别出这个测试应该抛出异常。而且我也不建议大家使用[ExpectedException],你可以用换成下面的写法

    [Test]
    public void should_throw_exception()
    {
       Assert.Throws<Exception>( () => 
                    { throw new Exception(); });
    }

    这样的好处就是我可以明确知道那一句抛出了异常,而且Nunit2标签也能识别出来。

    ExceptionInDispose

    在C#中是可以定义析构函数的,那么下面的测试用nunit-console-x86.exe运行会成功,虽然它会在析构函数中抛出异常。

    [Test]
    public void should_throw_exception()
    {
        new C();
    }
    
    internal class C
    {
        ~C(){ throw new Exception(); }
    }

    我认为这是不对的,我加入了析构函数,肯定是需要管理非托管资源,析构阶段也需要关注的。Nunit2标签帮我抓住了这个问题,它显示测试通过了,但是却因为异常而终止了执行。

    效果

    切换到Nunit2之后,再也没有看到过nunit的socket error,而且帮助我抓到了之前遗漏的东西,你也可以试试。

  • 相关阅读:
    读取lotus85邮箱未读文档
    Lotus notes 通讯录的导入导出
    如果你发现vpuserinfo.nsf数据库损坏,如何修复?该数据
    如何从iNotes获得未读邮件数量
    NTKO文档控件常见报错信息集合
    页面缓存清除的方法
    通过Lotusscript代码从损坏的数据库中抽取数据
    如何将lotus 通讯簿导入到outlook 2003中
    怎样使用Lotus Domino实用程序(Updall, Compact, Fixup) 进行正常和异常维护。
    0301.Lotus Domino与Windows AD帐户同步和SSO
  • 原文地址:https://www.cnblogs.com/iammatthew/p/2556165.html
Copyright © 2011-2022 走看看