您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > Nunit
NUnit之Attribue详解
作者:网络转载 发布时间:[ 2013/4/9 17:19:48 ] 推荐标签:

  在上一篇文章“NUnit之Assertion详解”中,给大家介绍了NUnit的断言,现在接着给大家介绍Attribute在NUnit中的具体作用。

  Attribute是C#一个重要的语言特征,园子里应该有不少这方面的文章,如果对Attribute不太了解,建议先去稍稍了解一下,亲手做个小程序感受一下Attribute的作用。

  我们在使用NUnit编写测试用例时,离不开两个基本的Attribute,例如,我们要测试一个类的Add方法,使用的代码如下:

  [TestFixture]public class MyTest{ [Test] public void TestAdd() { int a = 99; int b = 1; int value = MyMath.Add(a,b); Assert.AreEqual(value, 100); } Public void TestDel() { int value = MyMath.del(99,1); Assert.AreEqual(value, 98); }}

  上面的代码中,已经使用了两个Attribute,即[TestFixture]和[Test],其中[TestFixture]的作用是声明MyTest类是一个含有测试方法的类,而[Test]则说明TestAdd是一个测试方法,而TestDel由于没有用[Test]声明,所以它不是测试方法,虽然它以Test开头。

  对于编译后的Assembly文件,NUnit是通过查找[TestFixture]和[Test]这类它支持的与测试相关的Attribute来确定哪些类包含了测试方法,以及这些类中的哪些方法是测试方法。

  对于上面的例子,如果用NUnit的图形化界面打开其编译后的Assembly,应该看到如下的界面,TedtAdd方法以及它所属的命名空间按照树的形式展开,而TestDel方法由于没有[Test]的声明,所以它只是一个普通的方法,也没有在树中展现:

  点击Run按钮后,NUnit会运行所有的测试方法,运行后的界面如下

  通过上面的小例子,我们知道了[TestFixture]和[Test]这两个Attribute的作用,对它支持的Attribute有了初步了解。

  如果查看NUnit的源代码(大家可以去官网注册然后下载),可以知道,在NUnit.Framework这个命名空间中,有TestFixtureAttribute和TestAttribute两个类,它们负责解析带有[TestFixture]和[Test]声明的类和方法(在C#语法规范中,要实现一个名称为[ABC]的Attribute,必须建立名称为ABCAttribute的类,并继承于Attribute这个基类)。

  NUnit支持的Attribute远不止上面两个,我大致把它们分为四大类,分别是控制类、数值类、平台类和其它类,下面逐一介绍

  一:控制类

  这些Attribute控制测试类或者测试方法,而且成对出现,功能基本相比,了解一个自然了解另外一个。

  [TestFixture]/[Explicit]:声明一个类是测试类/声明一个类只有在UI界面被选中时才执行

  [TestFixtureSetup]/[TestFixtureTearDown]:在测试开始前/结束后要执行的操作,一个TestFixture只能有一个TestFixtureSetup或TestFixtureTearDown。

  [Test]/[Ignore]:是测试方法/忽略掉,测试时不执行

  [Setup]/[TearDown]:每个测试方法在执行前/结束后要执行的操作

  二:数值类

  数值类Attribue是NUnit的一大亮点,善于使用这些Attribue,将使测试方法变得清晰、简洁、可读性强、可扩展性强,有利于进行数据驱动下的测试。

  为了说明下面的例子,使用下面的方法,也是打印输出输入值及其数据类型,这样便于把执行的结果通过打印的方式在NUnit中输出

  Console.WriteLine(t + ", its type:" + typeof(T));

  [Values]:以参数的形式传入一组值,NUnit会把这组值分解成相应数量的子测试。

  例如下面的代码,分别在[Values]中传入三组共8个值,在执行时便一共会分解成8个子测试方法,例如

  TestPrintInt([Values(1, 2, 3)] int x)会被分解为TestPrintInt(1)TestPrintInt(2)TestPrintInt(3)三组

  如下图,当选中ValueDemo这个节点,然后点击Run按钮后,会看到一共测试了8个测试用例。

  当了解了这个Attribue的设计思路后,以后的其它Attribute也很容易理解了,往往通过它们的命名可以猜出一二。

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd