在Erlang模块中包含EUnit测试是否被视为良好实践?

在Erlang模块中包含EUnit测试是否被视为良好实践?,erlang,eunit,Erlang,Eunit,使用EUnit似乎有两种常见的方法: 在模块末尾包含测试本身 将测试添加到单独的“测试”路径 假设我只对测试特定模块的导出功能感兴趣,那么选择一种方法比另一种方法有什么优势或惯例吗;医生:你通常可以把它们放在源头的底部,而不会把事情搞砸。交错总是很糟糕。编写如此多的测试,以至于您需要一个特殊的地方来存放大量特定于测试的代码,这意味着您浪费了时间 在某些情况下,将其分解会缩短源文件并使导航变得更容易。奥托,难以找到源头通常是其他更深层次问题的迹象 我发现透析器和用户是我真正的bug发现者,除了纯功

使用EUnit似乎有两种常见的方法:

  • 在模块末尾包含测试本身
  • 将测试添加到单独的“测试”路径

  • 假设我只对测试特定模块的导出功能感兴趣,那么选择一种方法比另一种方法有什么优势或惯例吗;医生:你通常可以把它们放在源头的底部,而不会把事情搞砸。交错总是很糟糕。编写如此多的测试,以至于您需要一个特殊的地方来存放大量特定于测试的代码,这意味着您浪费了时间

    在某些情况下,将其分解会缩短源文件并使导航变得更容易。奥托,难以找到源头通常是其他更深层次问题的迹象

    我发现透析器和用户是我真正的bug发现者,除了纯功能性的、零副作用的代码外,测试的实用性相对较小。在纯功能代码的情况下,测试是微不足道的——一旦检查了这类代码,很有可能没有人会在很长时间内重新访问它。在这些情况下,我通常会在最后包括测试,这样如果我们想回去再次找到它们,我就不会丢失它们。我会有意识地进行重构,直到我的代码尽可能多地属于这种类型——并不是所有人都认为这是值得的

    代码中毛茸茸的部分是一些副作用,特别是如果你没有使用打字机和透析器来找出你对自己犯下的最严重的罪行。所有现实世界中的bug唯一的共同点是它们已经通过了所有测试。我从来没有发现编写测试所花费的精力和副作用代码中的错误之间有任何关联。实际上,目前还没有正式测试参与者模型协议的方法,而交互通常是剩余错误所在,而不是隐藏在您已经仔细考虑过的流程中

    从具体的角度来看,考虑一下:你是否愿意使用一个系统花费了X小时正确打印,或者X小时写作和运行测试?我投票赞成打字。我不是说测试不好,我是说它在开发人员时间上很昂贵,并且在纯功能代码之外的效用有限。纯功能代码的测试有明显的可识别的限制,往往是琐碎和小的,因此可以悄悄地驻留在它们所应用的模块的底部