import在pytest中运行两次测试

时间:2015-10-06 01:29:18

标签: python unit-testing pytest

为什么py.test在那里运行TestFoo.test_foo()测试?据我所知,它运行TestBar.test_foo()

test_foo.py的内容:

import unittest

class TestFoo(unittest.TestCase):
    def test_foo(self):
        print "in test_foo"

test_bar.py的内容:

from test_foo import TestFoo

class TestBar(TestFoo):
    def test_bar(self):
        print "in test_bar"

输出:

[999]anarcat@marcos:t$ pytest -v
no test dir found testing here: /tmp/t
===========================  test_bar.py  ============================
test_bar (test_bar.TestBar) ... in test_bar
ok
test_foo (test_bar.TestBar) ... in test_foo
ok
test_foo (test_foo.TestFoo) ... in test_foo
ok

===========================  test_foo.py  ============================
test_foo (test_foo.TestFoo) ... in test_foo
ok

*******************************************************************************
Ran 4 test cases in 0.00s (0.00s CPU)
All 2 modules OK

如果将TestBar放在与TestFoo相同的文件中,则TestFoo.test_foo()测试只会运行一次:

import unittest

class TestFoo(unittest.TestCase):
    def test_foo(self):
        print "in test_foo"

class TestBar(TestFoo):
    def test_bar(self):
        print "in test_bar"

输出:

[1001]anarcat@marcos:t$ pytest -v
no test dir found testing here: /tmp/t
===========================  test_foo.py  ============================
test_bar (test_foo.TestBar) ... in test_bar
ok
test_foo (test_foo.TestBar) ... in test_foo
ok
test_foo (test_foo.TestFoo) ... in test_foo
ok

*******************************************************************************
Ran 3 test cases in 0.00s (0.00s CPU)
All 1 modules OK

不应该忽略导入后面的测试吗?

3 个答案:

答案 0 :(得分:3)

解决此问题的一种简单方法是导入模块,而不是导入测试类。

import test_foo

class TestBar(test_foo.TestFoo):
    def test_bar(self):
        print "in test_bar"

这将允许您访问TestFoo类,而无需运行两次测试。

答案 1 :(得分:1)

没有。它没有一种忽略进口的好方法。测试运行器只是枚举模块中定义的名称并执行看起来像测试的名称。例如,如果您导入第一个 test_bar.py dir模块,则会定义TestFooTestBar。测试运行器会看到两个测试并执行它们。

同样,TestBar有两种方法 - test_bartest_foo。测试运行器不区分测试类定义的名称和从基类继承的名称。

答案 2 :(得分:-1)

从test_foo导入TestFoo:-这句话将使TestFoo类可用于test_bar.py

TestBar(TestFoo)类:这使TestBar类扩展了TestFoo。...

test_bar.py的内容

这是因为您正在导入类

Class TestFoo(unittest.TestCase):     def test_foo():         打印(“在test_foo中”)

TestBar(TestFoo)类:     #这是因为u正在扩展TestFoo,因此它的功能也可用于TestBar     def test_foo():         打印(“在test_foo中”)

def test_bar(self):
    print ("in test_bar")

现在清楚地知道,如果您运行此特定模块,将输出什么。