【Nunit入门系列讲座 6】NUnit断言- 条件断言

作者:shinoy
时间:2012/2/3 版权所有,侵权必究。
出处: http://blog.csdn.net/snowshinoy 


本节示例代码下载:示例代码


        首先,对喜欢本系列文章的朋友感觉非常抱歉,由于年前项目太忙加上杂事太多,所以本系列的更新停滞了一段时间。现在虽然依然挺忙,还是决定抽点时间不断更新,希望大家继续支持。在这一节中,我们来看下NUnit中的条件断言语句,顾名思意,条件断言就是根据条件的成立与否来决定测试是否通过。由于条件判断的结果是一个布尔量,也就是我们常说的是与否,而在.NET中这种布尔量可以在多种地方出现-函数的返回,类成员属性,某个用户自己定义的比较过程等等。这就决定了NUnit的条件断言是可以很灵活的,从最简单的判断一个值,到自定义一些复杂的条件完成比较复杂的测试。

  一、条件语句及布尔量

        学习过某种编程语言的朋友对这2个概念都不会陌生。大部分的高级语言都定义了布尔类型,该类型的变量可以有TRUE或者FALSE两种值。而条件语句是程序中分支存在的前提,更是必不可少,条件语句结果值就是布尔量。但是布尔类型并不是在所有的语言中都支持,例如C99标准之前的C语言。这类语言中,一般通过其他方式来表示TRUE或者FALSE的概念,C语言中使用的是0值和非0值来表示FALSE和TRUE。所以很多从C语言转入.NET的朋友就会想当然的认为BOOL量和整型可以通用,但是其实在.NET中,布尔量是一个基本的类型,不能和数值类型直接比较和赋值。

        我们在.NET中这样初始化布尔变量:

bool on = 1;
        就会得到一个编译错误: error CS0031: Constant value '1' cannot be converted to a 'bool',而这样的赋值在C语言中是没有什么问题的。大家在使用条件断言时,一定要注意这样的问题,不能想当然的认为某些类型可以和布尔类型通用。

        

  二、条件断言及在测试中应用

        我们先来熟悉下NUnit中支持的条件断言语句:

Assert.IsTrue( bool condition );
Assert.IsTrue( bool condition, string message );
Assert.IsTrue( bool condition, string message, object[] parms );

Assert.True( bool condition );
Assert.True( bool condition, string message );
Assert.True( bool condition, string message, object[] parms );

Assert.IsFalse( bool condition);
Assert.IsFalse( bool condition, string message );
Assert.IsFalse( bool condition, string message, object[] parms );

Assert.False( bool condition);
Assert.False( bool condition, string message );
Assert.False( bool condition, string message, object[] parms );

       

        这样的格式与我们在前面学习的相等断言基本一样,所以我们很快就能看出他的用法。IsTrue 和 True方法主要用来判断condition这个条件语句是否为真,如果不为真则抛出AssertionException.异常给NUnit,IsFalse和False主要相应就是判断condition这个条件语句是否为假,不为假再抛出AssertionException.

        我们现在使用条件断言来测试讲座3里我们用到的计算器程序(参考http://blog.csdn.net/snowshinoy/article/details/6967054),这个程序我们已经知道包含了add和sub方法,并且暂时只支持int类型。我们将讲座3里的测试用例,重新使用新的条件断言重新实现一遍。

[Test]
public void AddTestbyCondition()
{
  Calculate calculate = new Calculate();
  Assert.True((calculate.add(9, 3) == 12), "add 9 and 3 return bad result");
  Assert.IsTrue((calculate.add(8, 3) == 11),"add 8 and 3 return bad result");
}

[Test]
public void SubTestbyCondition()
{
  Calculate calculate = new Calculate();
  Assert.False((calculate.sub(10, 2) != 8), "sub 10 with 2 return bad result");
  Assert.IsFalse((calculate.sub(10, 1) != 9), "sub 10 with 1 return bad result");
}

        我们来看下测试结果,我们只运行使用条件断言新定义的测试AddTestbyCondition和SubTestbyCondition



        修改断言,看看如果是失败的情况:

[Test]
public void AddTestbyCondition()
{
  Calculate calculate = new Calculate();
  Assert.True((calculate.add(9, 3) == 12), "add 9 and 3 return bad result");
  Assert.IsTrue((calculate.add(8, 1) == 11),"add 8 and 1 return bad result");
}

[Test]
public void SubTestbyCondition()
{
  Calculate calculate = new Calculate();
  Assert.False((calculate.sub(10, 2) != 8), "sub 10 with 2 return bad result");
  Assert.IsFalse((calculate.sub(10, 1) != 8), "sub 10 with 1 return bad result");
}


         可以很清楚的看到,我们的条件断言起了作用,测试在这里由于条件的不成立失败了。我们在实际的测试中,可以灵活的根据需要建立条件表达式,并通过条件断言来设定测试判断,例如可以判断某个dialog box 的返回是否是哪种输入,来决定测试的流程。今后我们会有复杂使用的例子。


  三、结语

          新年的第一篇,就先说这么多吧。希望大家有兴趣的能继续关注本系列,有问题可以联系我讨论[email protected]或者在http://www.iquicktest.com/ask/上提问。


白盒测试QQ交流群:


 Rss订阅IQuickTest关于如何订阅?

GoogleReader订阅地址: http://feeds.feedburner.com/iquicktest

你可能感兴趣的:(Nunit入门系列讲座)