本节示例代码下载:示例代码
学习过某种编程语言的朋友对这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