重构为纯函数及代码隔离的测试策略
1. 重构为纯函数
当模块难以测试时,若可行,将尽可能多的逻辑重构为纯函数是简化测试的简便方法。代码有外部依赖时,通常会调用该依赖并处理响应后再返回结果。代码对数据的处理越多,就越适合将逻辑重构为纯函数。
例如,有一个函数既调用依赖又处理数据后返回响应,其中“处理数据”部分是无外部依赖的代码。若该函数的结果因依赖返回的数据不同而有显著差异,测试会很困难。此时可将这部分逻辑提取到一个新的纯函数中,使其成为原函数的新依赖。
重构为纯函数看似使事情变复杂,实则不然。这样做能将代码移到易于测试的位置,可进行多个简单或无需设置的测试,包括执行阶段和验证阶段。一旦该逻辑单元经过充分测试,就可安全地纳入原函数的测试黑盒中。并且,重构为纯函数适用于将逻辑提取到现有模块的新函数或新模块的新函数,只需确保其为公共函数且经过充分测试。
以 SoggyWaffle 模块为例,原本的代码组织如下:
defmodule SoggyWaffle do
alias SoggyWaffle.Weather
@thunderstorm_ids [200, 201, 202, 210, 211, 212, 221, 230, 231, 232]
@drizzle_ids [300, 301, 302, 310, 311, 312, 313, 314, 321]
@rain_ids [500, 501, 502, 503, 504, 511, 520, 521, 522, 531]
@all_rain_ids @thunderstorm
超级会员免费看
订阅专栏 解锁全文
1520

被折叠的 条评论
为什么被折叠?



