Python 检查单元测试是否通过

Python 检查单元测试是否通过,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我开发了一个爬虫程序及其单元测试(主要用于验证XPath)。我想在脚本执行之前运行特定的单元测试,以确保HTML结构没有改变,并且现有的XPath仍在工作。我不需要单元测试的输出,只需要一个标志:通过或失败 例如: tests.py: import unittest class CrwTst(unittest.TestCase): def test_1(self): [..] crawler.py class Crawler(object): def acti

我开发了一个爬虫程序及其单元测试(主要用于验证XPath)。我想在脚本执行之前运行特定的单元测试,以确保HTML结构没有改变,并且现有的XPath仍在工作。我不需要单元测试的输出,只需要一个标志:通过或失败

例如:

tests.py:

import unittest

class CrwTst(unittest.TestCase):
    def test_1(self):
        [..]
crawler.py

class Crawler(object):
    def action_1(self):
        [..]
我想像这样工作:

if CrwTst.test_1() is True:
    Crawler.action_1()

您可能会这样做:

crawler.py

import unittest
from tests import CrwTst

if unittest.TextTestRunner().run(CrwTst('test_1')).wasSuccessful():
    Crawler.action_1()
import unittest

def function_that_runs_crawler():
    from tests import CrwTst  # Dynamically import to resolve circular ref

    if unittest.TextTestRunner().run(CrwTst('test_1')).wasSuccessful():
        Crawler.action_1()
但是请注意,您可能会遇到循环导入的问题,因为您的测试可能已经依赖于
爬虫程序
,并且您希望执行的操作将使
爬虫程序
依赖于测试。这可能会表现为导入错误:无法导入名称CrwTst

要解决此问题,可以动态导入
CrwTst

crawler.py

import unittest
from tests import CrwTst

if unittest.TextTestRunner().run(CrwTst('test_1')).wasSuccessful():
    Crawler.action_1()
import unittest

def function_that_runs_crawler():
    from tests import CrwTst  # Dynamically import to resolve circular ref

    if unittest.TextTestRunner().run(CrwTst('test_1')).wasSuccessful():
        Crawler.action_1()

测试失败时会引发异常(通常是断言错误)。所以,只要你没有发现这个错误,你就可以做
test_my_thing();操作1()
。ZdaR也是对的,这似乎是单元测试的一种奇怪用法(它旨在测试代码本身,而不是验证传递给代码的数据),您可以创建一个验证函数,它要么返回
True
要么返回
False
@ZdaR我有很多测试用例,我认为最好在其他单元测试中保留这种验证。我是单元测试开发的新手,也许你是对的。@TomDalton我正试图从测试导入CrwTst到crawler.py
导入CrwTst
,我收到导入错误
导入错误:无法导入名称CrwTst