【问题标题】:How do I use the unittest setUpClass method()?如何使用 unittest setUpClass 方法()?
【发布时间】:2011-02-03 20:59:48
【问题描述】:

我正在寻找 python 2.7 unittest setUpClass() 方法的一些基本示例。我正在尝试在我的模块中测试一些类方法,并且我已经做到了:

import unittest  
import sys  

import mymodule  

class BookTests(unittest.TestCase):  
    @classmethod  
    def setUpClass(cls):  
        cls._mine = mymodule.myclass('test_file.txt', 'baz')  

但我不知道如何从这里开始使用我刚刚创建的对象编写测试。

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    在您的测试方法中,您现在可以通过 self 访问全局类属性 _mine。所以你可以这样做:

    def test_something(self):
        self.assertEqual(self._mine.attribute, 'myAttribute')
    

    【讨论】:

    • 这与直接创建对象有何不同。即:def setUp(self): cls_mine = baz().
    • @Pradoot Mine 在课堂上,你的在实例上。我个人可能会在 setUp 方法中设置它,但这只是一个偏好问题。
    • @Pradoot setUp() 在每个测试方法之前调用,而 setUpClass() 在所有测试之前调用一次。您的许多测试可以利用的任何昂贵的操作都应该进入setUpClass()
    • ‘通过self访问全局类属性_mine’,这是通用的Python语言规则吗?
    【解决方案2】:

    如果您使用的是 Django 1.8+,则应改用 setUpTestData 方法。

    然后您可以在cls 对象上设置任何属性,并通过self 对象上的各个测试方法访问它们。

    更多信息在the Django docs

    【讨论】:

    • setUpTestData 相对于 setUpClass 有什么优势?
    • 如果您需要为测试类中的每个测试设置相同的初始数据库状态,setUpTestData 应该更快。这是因为它支持数据库事务:所有测试都将包装在同一个事务中,setUpTestData 在该事务中只运行一次,然后每个测试将回滚到运行前设置的 setUpTestData。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多