【问题标题】:How to test methods with I/O that require sample files?如何使用需要示例文件的 I/O 测试方法?
【发布时间】:2019-07-09 07:39:40
【问题描述】:
我正在尝试使用 jasmine 编写一个用于读取文件并处理它的打字稿方法的测试。此方法有两个步骤(在读取文件之外):验证文件,然后处理它。我想测试当文件无效时该方法是否会抛出异常。
对于我的测试,我需要示例文件来测试,所以我想知道生成/存储代表性测试文件的最佳做法是什么。我应该手动创建这些并将它们与测试一起保存吗?我应该写一些生成文件来测试的东西吗?写一些生成文件数据的东西来测试?完全不同的东西?
从其他问题 (Unit Testing File I/O) 我可以看出我不需要测试 I/O 本身,只需要测试方法的功能,但我确实需要一些数据来测试方法。
【问题讨论】:
标签:
typescript
unit-testing
jasmine
【解决方案1】:
正如您所描述的,您要测试的是文件的内容是否经过正确验证。文件内容只是数据,对于验证过程,它不应该影响数据的实际来源。这意味着,“文件内容”也可以作为实际上直接从测试代码提供的数据提供:
- 在最简单的情况下,数据可能只是常量字符串或字节数组。
- 如果它变得更复杂一点,您可以使用一些创建数据的测试辅助方法。
- 如果不违反任何测试目标,您甚至可以考虑使用负责创建数据的实际组件。
这要求您能够以某种方式绕过文件内容的读取,例如通过模拟文件访问操作。或者,通过将文件的读取与内容的验证分开,这样验证部分已经获得了一些内存数据进行验证,可以单独进行测试。
从您的问题中不清楚您的方案是否允许这样做。但是,如果可能的话,它有一些不错的特性: 您的测试更容易维护,因为您不是在处理大量文件,而是将所有内容都放在一个地方(即包含测试的文件)。您较少依赖文件系统问题,例如缺少写入或读取权限、文件名区分大小写等。