【发布时间】:2014-10-14 22:17:14
【问题描述】:
我有一个函数,它在文件名上调用 isFile(来自 std.file),然后继续追加 .1、.2、.3 等,检查其中是否存在。
我想对函数进行单元测试,但我需要模拟 isFile。
我环顾四周,找到了模拟类而不是单个函数的方法。
【问题讨论】:
-
一个选项可能是根据版本(unittest)或其他东西更改导入......所以真正的使用std.file.isFile,但unittest使用your.mocks.isFile
-
感谢您的想法,但如果我走这条路,我更愿意将使用过的 std 函数包装在某个对象中并使用工厂来决定是实例化真实对象还是模拟对象。我仍在寻找更“外科手术”的解决方案:)
-
抱歉,本地导入又出了什么问题?比如,导入 std.file;导入std.stdio; int main(string[] args) { writeln(isFile("qq.d"));返回0; } unittest { 导入模拟; writeln(isFile("qq.d")); }
-
好吧,具体来说,进口必须改变 - 我认为本地进口不会覆盖全球进口,它仍然会要求您消除歧义。所以我在想的是对导入本身进行版本控制,所以实际上只完成了其中一个——那就没有歧义了。不过我得跑一分钟,等我回来再写答案。
-
实际上,本地导入确实会覆盖全局导入。请参阅dlang.org/module.html 中的“作用域模块”部分 引用:“查找导入以满足该作用域内任何未解析的符号。导入的符号可能会隐藏外部作用域的符号。”
标签: function unit-testing mocking d phobos