8

我正在运行具有设置功能的鼻子测试,该功能需要加载与生产数据库不同的数据库。我使用的 ORM 是 peewee,它要求在定义中设置模型的数据库。

所以我需要设置一个条件变量,但我不知道使用什么条件来检查nosetest是否正在运行文件。

我在 Stack Overflow 上读到你可以检查nosesys.modules但我想知道是否有更准确的方法来检查鼻子是否正在运行。

4

2 回答 2

10

也许检查sys.argv[0]一下正在运行什么命令?

于 2011-09-07T23:41:43.250 回答
1

检查 sys.argv 可能有效,但您可以使用nosetestsor执行鼻子python -m nose,这显然会给您带来不同的结果。

我认为更健壮的方法是检查堆栈并查看代码是否通过名为nose.

示例代码:

import inspect
import unittest


def is_called_by_nose():
    stack = inspect.stack()
    return any(x[0].f_globals['__name__'].startswith('nose.') for x in stack)


class TestFoo(unittest.TestCase):
    def test_foo(self):
        self.assertTrue(is_called_by_nose())

示例用法:

$ python -m nose test_caller
.
----------------------------------------------------------------------
Ran 1 test in 0.009s

OK
$ nosetests test_caller
.
----------------------------------------------------------------------
Ran 1 test in 0.009s

OK
$ python -m unittest test_caller
F
======================================================================
FAIL: test_foo (test_caller.TestFoo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_caller.py", line 14, in test_foo
    self.assertTrue(is_called_by_nose())
AssertionError: False is not true

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (failures=1)
于 2017-11-18T19:05:16.997 回答