Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1268921
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: Python/Ruby

2016-12-20 16:49:15

testscenarios 是 python单元测试模块的扩展,支持使用不同的场景运行测试。

应用场景:
1、对某个对象的不同版本运行一组测试
2、对一组不同的对象运行同一个测试
3、对不同的驱动执行相同的测试集,有点类似2

3基本上涵盖了1 和 2,所以以三为例。

要实现场景3,一般的方法时mixin class:该类既包含单元测试的类,又包含特定驱动用法的设置

看一个例子:
import unittest

class MongoDBBaseTest(unittest.TestCase):
    def setUp(self):
        self.connection = connect_to_mongodb()
        
class MySQLBaseTest(unittest.TestCase):
    def setUp(self):
        self.connection = connect_to_mysql()
        
class TestDatabase(unittest.TestCase):
    def test_connected(self):
        self.assertTrue(self.connection.is_connected())
        
class TestMongoDB(MongoDBBaseTest,TestDatabase):        
    pass

class TestMySQL(MySQLBaseTest,TestDatabase):
    pass
    
上面的方法从长期维护的角度,实用性和可扩展性都不好。

下面    testscenarios 上场了,它运行时能够生成一组不同的场景,并将这些场景提供给类进行测试。
上面的例子用 testscenarios实现是这样的:
import testscenarios
class TestDatabase(testscenarios.TestWithScenarios):
    scenarios = [
        ('MongoDB',dict(connection=connect_to_mongodb())),
        ('MySQL',dict(connection=connect_to_mysql())),
    ]
    def test_connected(self):
        self.assertTrue(self.connection.is_connected())
scenarios 定义场景列表,场景名称是第一个元素,针对改场景的属性字典是第二个元素。
上面的例子中如果需要添加其他场景,只需要扩展scenarios。也可以添加其他test对这一组场景执行其他测试。



详细参考:

原文:
阅读(1690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~