在Python中使用外部文件进行测试
假设我想写一个新的markdown解析器,并且希望它经过充分的测试。我想创建两个文件夹,一个叫markdown,另一个叫html,这两个文件夹里有相同的文件名。为了进行测试,我只需要一个简单的函数:
def test_correct_parsing(md, html):
assert markdown(md) == html
我想问的是:这样做是不是一个好主意?如果是的话,我该如何用pytest来实现呢?
相关问题:
1 个回答
2
我觉得你需要的不止这些,因为你只能证明你能解析那些特定的Markdown输入流。每种测试策略通常都是分层的,比如:
- 对每种特定的Markdown标签单独进行测试——确保解析器能正确地把每个标签转换成预期的HTML片段。这些测试应该是输入和输出文本,而不是读写文件,这样测试起来简单,也容易自动化。
- 对每种容器标签进行测试,比如创建段落、div、表格等的标签——确保生成的HTML容器是正确的,并且里面的Markdown内容也能正确生成,同样是输入文本,输出文本。
- 一组针对格式错误标签的测试——确保任何格式错误都能生成正确的HTML或错误信息,同样是输入文本,输出文本。
- 一组文件处理的测试——包括不存在的文件、损坏的文件、没有权限的文件。
- 最后,对你特定的输入进行测试,以增加信心。
你可能还应该在测试代码时使用代码覆盖率统计,以确保你确实覆盖了所有的代码路径。
我推荐这样做有几个原因:
- 分开测试每个部分效率更高——这样如果某个测试失败,你可以很容易找出是哪个测试出了问题,因为每个单独的测试都会报告自己的成功或失败。如果你只做一大堆测试,结果有失败,你就得去找出在HTML输出中哪里出错了(如果你真的得到了输出的话),然后再试着找出哪个Markdown元素失败了。
- 如果你改了什么,测试你改的那部分就简单多了。
- 采用分层的方法,你可以在写代码时就进行测试,而不必等到所有代码都写完。
- 这只是个好习惯——许多专家多年来都推荐这种方法,原因有很多。如果没有特别的理由,遵循好习惯是明智的,这会让你的生活更轻松。