繁体   English   中英

只为单元测试启用Python代码吗?

[英]Enable Python code only for unittests?

假设我具有以下功能:

def f():
    if TESTING:
        # Run expensive sanity check code
    ...

仅当我们运行单元测试时,运行TESTING代码块的正确方法是什么?

[编辑:是否可以访问一些“全局”变量以了解单元测试是否开启?]

通常,我建议不要这样做。 您的生产代码确实不应该意识到单元测试的存在。 造成这种情况的原因之一是, if TESTING块中可能有代码(意外地)通过了测试,并且由于代码的生产运行不会运行这些位,则即使您的代码无法运行,也可能会导致生产失败测试通过。

但是 ,如果您坚持要这样做,则有两种可能的方式(我能想到)可以完成。

首先,可以使用在测试用例中设置为True的模块级别TESTING var。 例如:

生产代码:

TESTING = False    # This is false until overridden in tests

def foo():
    if TESTING:
        print "expensive stuff..."

单元测试代码:

import production

def test_foo():
    production.TESTING = True
    production.foo()    # Prints "expensive stuff..."

第二种方法是使用python的内置assert关键字。 当python使用-O运行时,解释器将剥离(或忽略)代码中的所有assert语句,从而使您可以将这些昂贵的gem散布在各处,并知道如果以优化模式执行它们将无法运行。 只要确保在没有-O标志的情况下运行测试即可。

示例(生产代码):

def expensive_checks():
    print "expensive stuff..."
    return True

def foo():
    print "normal, speedy stuff."
    assert expensive_checks()

foo()

输出(使用python mycode.py运行)

normal, speedy stuff.
expensive stuff...

输出(使用python -O mycode.py运行)

normal, speedy stuff.

关于断言语句的警告:如果断言语句的求值结果不是真实值,则会引发AssertionError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM