Python 创建接受动态文本数据的pytest测试夹具的最干净方法
我有一个类,它在实例化时接收文本数据,还包含在文本数据中搜索主机名和数据中心信息的解析方法:Python 创建接受动态文本数据的pytest测试夹具的最干净方法,python,unit-testing,pytest,Python,Unit Testing,Pytest,我有一个类,它在实例化时接收文本数据,还包含在文本数据中搜索主机名和数据中心信息的解析方法: class SystemConfig: def __init__(self, text_data): self.text_data = text_data def get_server(self): match = re.search('.+ (server.+?)', self.text_data, re.S) if match: return match
class SystemConfig:
def __init__(self, text_data):
self.text_data = text_data
def get_server(self):
match = re.search('.+ (server.+?)', self.text_data, re.S)
if match:
return match.group(1)
def get_datacenter(self):
match = re.search('.+? (dc.+?)', self.text_data, re.S)
if match:
return match.group(1)
我正试图找出为此编写pytest装置的最有效方法
我要走的路线如下:
@pytest.fixture
def server_data():
return SystemConfig('row 1 rack 2 server001')
@pytest.fixture
def datacenter_data():
return SystemConfig('row 1 rack 2 dc001')
def test_server_data(server_data):
assert server_data.get_server() == 'server001'
def test_server_data(server_data):
assert server_data.get_datacenter() == 'dc001'
每次我需要调整文本数据时实例化一个类对我来说效率很低。我可能需要再编写20种解析方法来获取特定的文本条目
对于编写测试夹具的最佳方法的任何指导,我们都非常感谢
如果您需要进一步的澄清,也请让我知道。先谢谢你 对原始类进行结构化似乎有些奇怪,因为正则表达式解析是为get方法完成的,而get方法本身是非语法的——每次调用该方法时都要重新解析字符串。为什么不实现一个类方法,例如SystemConfig.from_字符串,来进行解析呢?然后_uinit__uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。为了进一步澄清,输出来自一个文件。因此,我应该列出一个包装器,它打开文件,将文件数据读入变量,然后用该数据实例化类。文件本身有各种条目和其他需要解析的有趣数据。所以我的主要问题是,不是所有的东西都是行机架服务器dc:-。因为我正在尝试做TDD,我或多或少地在寻找一个起点。配置文件本身是不一致的,所以我必须依靠关键字和位置条目来提取我需要的内容。我相信你想要的是caleld,我不确定这是否与我说的内容冲突。一旦你的代码工作,考虑把它的一些反馈。詹姆斯。谢谢你提供这个,我相信这会让我走上正确的方向。我的问题是。。使用虚假的输出,并用我想要用stringIO之类的东西解析的确切文本补充测试用例是否更好?基本上解耦init所需的值和我需要解析的实际文本?恐怕如果我还有15个方法,参数列表可能会很长。我希望对于这个特定的用例有一个最佳实践。