我正在编写解析大文件的生产代码,该文件本身包含许多不同的案例。为了对生产代码进行单元测试,我想为每个案例编写一个测试用例。我的问题是设置测试目录和测试代码的好方法。
目前的目录结构是:
root/
src/
parser.py
test/
test_parser.py
raw/
case_1.csv
case_2.csv
...
测试代码如下所示:
from parser import parse
import unittest import TestCase
class Test_Parser(TestCase):
def setUp(self):
raw_dir = 'raw'
def test_case_1(self):
filename = self.raw_dir + '/case_1.csv'
actual = parse(filename)
# assert actual == expected
def test_case_2(self):
filename = self.raw_dir + '/case_2.csv'
actual = parser(filename)
# assert actual == expected
...
是否有更多的Pythonic方法可以将目录self.raw_dir
排除在外,这样测试用例更干净,只需编写filename = 'case_1.csv'
?
答案 0 :(得分:1)
如果你想避免在测试方法中编写整个路径,这是可以理解的,你可以在一个不以_test
开头的单独方法中隔离它,因此在执行时不会被调用测试:
import os
import parser
import unittest
class TestParser(unittest.TestCase):
def setUp(self):
self.raw_dir = "raw"
def get_path(self, filename):
path = os.path.join(self.raw_dir, filename)
return path
def file_parse(self, filename):
# every method of this class being supposed to call
# the parser, it makes sense to isolate these calls
# into a specific method to avoid repetition
# - won't be the same is the class is more general-purpose
path = self.get_path(filename)
actual = parser.parse(path)
return actual
def test_case_1(self):
actual = self.file_parse(filename='case_1.csv')
# assert actual == expected
def test_case_2(self):
actual = self.file_parse(filename='case_2.csv')
# assert actual == expected
这里的主要想法是关注点分离。一种特定的方法来处理“将dirs和文件名放入正确的路径”劳动,另一种方法是进行解析和测试方法来进行实际测试(仅限于此)。
请注意,根据建议,您应使用os.path.join
(documentation),而不是使用/
字符串进行硬编码。
此外,根据PEP8,class names should be CamelCase
,而不是under_score
或A_Mix_Of_Both
。