testing - Elixir 测试:确保模块定义回调
问题描述
我正在尝试编写一个测试来验证行为是否定义了它应该定义的回调。我该怎么做?
我有一个定义回调的模块,例如:
defmodule MyModule do
@callback my_callback(arg :: binary) :: any
end
我想确保my_callback/1
由MyModule
.
由于@callback
是一个属性,我尝试调用MyModule.__info__(:attributes)
,但响应中不存在回调。
解决方案
尽管在提出问题时除了在已弃用的模块中之外没有记录,但现在在Typespecs中记录了这一点:
检查行为
和属性用于创建定义模块上可用的功能
@callback
。此函数可用于检索该模块定义的回调和可选回调。@optional_callback
behaviour_info/1
例如,对于
MyBehaviour
上面“可选回调”中定义的模块:MyBehaviour.behaviour_info(:callbacks) #=> [vital_fun: 0, "MACRO-non_vital_macro": 2, non_vital_fun: 0] MyBehaviour.behaviour_info(:optional_callbacks) #=> ["MACRO-non_vital_macro": 2, non_vital_fun: 0]
使用
iex
时,IEx.Helpers.b/1
助手也可用。
推荐阅读
- postgresql - 在条件不返回相同结果的情况下使用种子值随机排序
- java - 我无法使用我的程序获得完整的 html 代码
- javascript - 如何从我发布的 expo 应用程序中获取源代码?
- jenkins - 如何将詹金斯用户复制到另一台服务器
- node.js - React App 使用 NodeJS 失败:错误:在 Process.ChildProcess._handle.onexit 产生 cmd ENOENT
- php - 带有逗号和连字符的数字的特定正则表达式
- machine-learning - 了解嵌入向量维度
- javascript - 如何从异步调用(xlsx 文件)中获取对象到全局范围
- react-native - 如何从自定义反应导航标题组件访问父状态值
- html - 将一个额外参数传递给 Form RePost 上的 MVC 控制器 Index 方法