Python学习-41.Python中的断言

时间:2022-08-25 12:37:44

先来点题外话:

在现代编程开发中,TDD(测试驱动开发)变得越来越流行(PS:DDD(领域驱动开发)也是,但两者并不冲突,就像面向过程和面向对象)。而作为TDD的根本——单元测试也是越来越重要,单元测试可以测试代码的正确性,例如以下的C#代码:

 public class Helper
{
public string RemoveHtmlMarkup(string str)
{
return str;
}
}

需求是去除字符串中的html标记。当然现在这样是错误的,只会原样输出。

接下来编写测试代码。(使用了NUnit)

 [TestFixture]
public class HelperTest
{
[Test]
public void RemoveHtmlMarkupTest([Values("<html></html>")]string str)
{
var output = new Helper().RemoveHtmlMarkup(str);
Assert.False(output.Contains("<html>"));
}
}

现在肯定是不通过的了。修改原来的代码,去除掉"<html>"然后再跑测试,过了,html标记不止这么点(还有title等等),然后测试代码修改,不通过,修改Helper的代码。这样反复进行,TDD就是这样。

当然这个例子可能并不是很好,将就一下吧。

好了,再继续就扯题了,回到Python中。

首先,令我想不到的是,Python中有断言,并且上升到了一等公民——关键字的水平。使用的关键字是assert。语法很简单,不像C#中Assert还得点(无论是MSUnit还是NUnit)。

 var = input('please input 1:')
assert var == '','you must input 1'

assert关键字后跟两个或一个参数。第一个参数是一个布尔值,如果该布尔值为False,则断言不通过,抛出一个AssertionError的错误,第二个参数是错误的描述,也可以不码上,但一般情况下还是码上吧。

呃,就是这几行,没了。Python就是这样简洁。