【问题标题】:How do I find out if the current test is the last to be run?如何确定当前测试是否是最后运行的?
【发布时间】:2016-03-20 22:56:58
【问题描述】:

如何从当前测试中找出它是否是最后一个运行的? (Python 单元测试/鼻子测试)

在测试运行的最后,我有一些特定的夹具拆卸要完成,如果在逐个测试的基础上我可以确定:

if last_test:
   hard_fixture_teardown()
else:
   soft_fixture_teardown()

我有一个可以完美运行的包拆解,但将固定信息传递回__init__.teardown_package() 似乎非常混乱。

【问题讨论】:

    标签: python python-2.7 python-unittest nosetests


    【解决方案1】:

    您可以结合使用TestCase.tearDown()TestCase.tearDownClass() 来实现此目的。 tearDown() 为每个测试方法调用,tearDownClass() 在类中的所有测试都运行后调用。

    【讨论】:

    • 谢谢,但是如果您只想在整个运行结束时运行“硬拆解”,这可能包含许多测试类?
    • @Jele:你猜到了,还有tearDownModule
    • 尤金,干杯。我以前尝试过,但似乎无法正常工作。把这个放在哪里最好?我有一个现有的设置/拆卸模块,它在结构的较高位置工作,这将是“硬拆卸”的好地方,但它将相关的夹具信息传递回它,感觉错误/混乱。有什么想法吗?
    • @Jele:你把它放在模块级别。但是,您似乎需要重新组织测试,以便模块彼此独立。
    【解决方案2】:

    正如here 所述,单元测试并不意味着有顺序,取决于顺序的单元测试要么没有很好地构思,要么只需要合并到一个整体中。 (在单个测试中合并单独的函数是公认的答案)

    [评论后编辑]

    如果顺序不重要,您可以这样做(相当混乱,imo 我们仍在强制限制应如何使用单元测试)

    在您放置的每个测试包中:

    def tearDownModule():
        xxx = int(os.getenv('XXX', '0')) + 1
        if xxx == NUMBER_OF_TEST_PACKAGES:
            print "hard tear down"
        else:
            print "not yet"
            os.environ['XXX'] = str(xxx)
    

    从全球某处导入了 NUMBER_OF_TEST_PACKAGES 个。

    如果顺序不重要,我想当使用夹具时只读取而不修改,如果是这样,您可以将其设置为类方法

    @classmethod
    def setUpClass(cls):
        print "I'll take a lot of time here"
    

    【讨论】:

    • 在这种情况下,测试的顺序无关紧要,它更多地减少了创建冗长的夹具的时间,并在测试运行时而不是在每个单独的测试之间进行必要的清理。跨度>
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2011-05-04
    • 2011-05-12
    • 2011-09-21
    相关资源
    最近更新 更多