在python类方法中测试

时间:2016-08-27 06:42:02

标签: python class python-unittest

我在python中使用unittest来测试项目。该项目定义了供其他python开发人员使用的类。然后可以运行该项目并利用用户编写的子类。

我想测试子类的方法是否正由项目传递正确的数据。我怎样才能做到这一点?从项目中继承子类的测试类中调用unittest.TestCase.assert*方法并不是直截了当的。

我已经尝试将TestCase对象设置为全局变量并从子类方法中调用TestCase对象的断言方法,但是全局变量似乎没有在范围内定义测试类方法。

实施例

import unittest
import myproject


class TestProjectClass(unittest.TestCase):
    def test_within_class_method(self):
        myproject.run(config_file_pointing_to_ProjectClass)     # Calls SomeUsersClass.project_method()


class SomeUsersClass(myproject.UserClassTemplate):
    def project_method(self, data_passed_by_project):
        #want to test data_passed_by_project in here
        pass

2 个答案:

答案 0 :(得分:0)

我能够通过使用raise将自定义异常传递到unittest.TestCase来实现此功能。自定义异常可以包含任何需要测试的数据。我在这里没有显示,但test_helper.py只是Exception的一个简单的子类。

import unittest
import myproject
from test_helper import PassItUpForTesting


class TestProjectClass(unittest.TestCase):
    def test_within_class_method(self):
        try:
            # The following line calls SomeUsersClass.project_method()
            myproject.run(config_file_pointing_to_ProjectClass)
        except PassItUpForTesting as e:
            # Test things using e.args[0] here
            # Example test
            self.assertEqual(e.args[0].some_attribute_of_the_data,
                             e.args[0].some_other_attribute_of_the_data)


class SomeUsersClass(myproject.UserClassTemplate):
    def project_method(self, data_passed_by_project):
        #want to test data_passed_by_project in here
        raise PassItUpForTesting(data_passed_by_project)

(出于某种原因,在同一个文件中定义自定义异常并不起作用,因为在用户类中创建的异常实例未被识别为自定义异常的实例。异常通过sys.exc_*显示异常类型的出现方式不同。所以我把异常放在另一个模块中,导入它,然后就可以了。)

答案 1 :(得分:-1)

您可以在docstring中尝试unittest。

看看这个:

http://docs.python-guide.org/en/latest/writing/tests/#doctest