为什么测试功能不能看到我的pytest灯具?

时间:2015-02-09 13:19:13

标签: python unit-testing python-2.7 pytest

我有以下结构:

demo/
  conftest.py
  test_1.py
  test_2.py

conftest.py内容为:

import pytest
@pytest.fixture()

def my_fixture():
print  "testing"*

test_1.py内容为:

def test_my_fixture(my_fixture):
    my_fixture

test_2.py内容为:

 import pytest

 @pytest.mark.usefixtures('my_fixture')
 def test_my_fixture():
     my_fixture

使用py.test -s执行测试时,我NameError中的灯具获得test_2.py,但test_1.py中没有;为什么呢?

这是输出:

================ test session starts ================
platform linux2 -- Python 2.7.3 -- py-1.4.26 -- pytest-2.6.4
plugins: timeout, random
collected 2 items 

test_1.py testing
.
test_2.py testing
F

===================== FAILURES ======================
__________________ test_my_fixture __________________

    def test_my_fixture():
>       my_fixture
E       NameError: global name 'my_fixture' is not defined

test_2.py:7: NameError

1 个答案:

答案 0 :(得分:4)

当您不需要直接访问灯具对象(灯具功能的返回值)时,请使用pytest.mark.usefixtures标记。

如果您需要访问fixture对象,请使用fixture-as-function-argument(代码中的第一种方式)。


第二个代码中出错的原因:my_fixture未在函数(不是局部变量)或模块(不是全局变量)中定义,并且它不是内置对象;但是代码正试图访问它; NameError

只是不要尝试访问my_fixture。 fixture对象将为None,因为my_fixture函数不返回任何内容。