我在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
答案 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)