C#的NUnit能够使用不同的参数多次运行相同的测试:
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q) {
Assert.AreEqual( q, n / d );
}
是否可以在Python的unittest
模块中执行相同的操作?
我可以选择
def test_divide(self):
for n, d, q in [(12, 2, 6), (12, 4, 3)]:
self.assertEqual(q, n / d)
但是
答案 0 :(得分:0)
Python没有用于添加此类测试的快捷语法,但可以将测试动态添加到unittest类。
根据您提供的示例,您可以按以下方式执行此操作:
import os
import unittest
class TestMath(unittest.TestCase):
pass
def add_method(cls, method_name, test_method):
"""
Add a method to a class.
"""
# pylint warns about re-defining the method name, I do want to re-define
# the name in this case.
# pylint: disable=W0622
test_method.__name__ = method_name
if not hasattr(cls, test_method.__name__):
setattr(cls, test_method.__name__, test_method)
def add_divide_test(n, d, q):
"""
Adds a test method called test_divide_n_by_d to the TestMath class that
checks the result of the division operation.
"""
def test_method(self):
self.assertEqual(q, n / d)
add_method(
TestMath, "test_divide_%d_by_%d" % (n, d), test_method
)
# Adding an entry to this list will generate a new unittest in the TestMath
# class
value_list = [
[12, 2, 6],
[12, 4, 3],
]
for values in value_list:
add_divide_test(values[0], values[1], values[2])
如果要根据目录中的文件列表生成单元测试,这将变得非常有用。例如,您可以在test_resources
中拥有一组数据文件,并实现类似的内容。
for file_name in os.listdir("test_resources"):
add_test_for_file(file_name)
设置为添加新的unittest后,您只需在test_resources
目录中添加新文件即可添加新测试