单元测试 .pl Perl 文件
Unit-testing a .pl Perl file
我是 Perl 的新手,但我正在尝试向 Sanoid (https://github.com/jimsalterjrs/sanoid) 添加一些功能,它是用 Perl 编写的单个脚本,没有 .pm 模块文件(据我了解这些东西)。
我想将一些简单的单元测试添加到我添加的新子例程中,我希望能够像在 Python 中一样轻松地完成此操作,您只需 import
其他文件的名称和测试子例程 return 来自各种输入的值。
我已经阅读了很多测试教程,并认为我遵循了如何进行实际测试,但我在导入我想要测试的脚本的第一个障碍上苦苦挣扎。
据我所知,导入内容的主要方法是将其转换为 .pm 模块,然后 use
,但我不想仅仅为了测试而尝试重新构建某人的代码(特别是当我对 Perl 很陌生)。替代方案似乎是 require
或 do
文件,据我所知,这将执行文件(这并不理想,因为即使在没有参数的情况下调用它也会做事)并且意味着我需要添加一个1;
到文件末尾以确保它 return 在需要时为真。
看起来我可以使用 unless (caller)
重新排列内容,以便在 require
d 时不执行任何操作,但我想检查一下我没有遗漏任何明显的内容。
这里 Perl 和 Python 真的没有区别。就像在 Python 中一样,在 Perl 中加载文件作为模块执行它。
但是就像在 Python 中一样,您可以检查模块是否作为脚本在 Perl 中执行。
# Python
if __name__ == "__main__":
main()
# Perl
main() if !caller();
这样的文件称为“modulino”。
也就是说,我不喜欢这种做法(无论哪种语言)。如果你想要一个模块,写一个模块。这只是我的意见。
嘿,很久以前我不得不为人们转换一堆东西时为此制作了一个工具:scriptdist。这是在程序上使用 Perl 工具链的快速修复。
然后的诀窍是能够加载脚本而不做任何事情,直到你的测试要求它,这就是 你将所有 top-level 代码包装在一个子例程中的地方,并且只有当 perl 认为文件 运行 作为程序时才调用它。
我已经写了很多相关内容:
我是 Perl 的新手,但我正在尝试向 Sanoid (https://github.com/jimsalterjrs/sanoid) 添加一些功能,它是用 Perl 编写的单个脚本,没有 .pm 模块文件(据我了解这些东西)。
我想将一些简单的单元测试添加到我添加的新子例程中,我希望能够像在 Python 中一样轻松地完成此操作,您只需 import
其他文件的名称和测试子例程 return 来自各种输入的值。
我已经阅读了很多测试教程,并认为我遵循了如何进行实际测试,但我在导入我想要测试的脚本的第一个障碍上苦苦挣扎。
据我所知,导入内容的主要方法是将其转换为 .pm 模块,然后 use
,但我不想仅仅为了测试而尝试重新构建某人的代码(特别是当我对 Perl 很陌生)。替代方案似乎是 require
或 do
文件,据我所知,这将执行文件(这并不理想,因为即使在没有参数的情况下调用它也会做事)并且意味着我需要添加一个1;
到文件末尾以确保它 return 在需要时为真。
看起来我可以使用 unless (caller)
重新排列内容,以便在 require
d 时不执行任何操作,但我想检查一下我没有遗漏任何明显的内容。
这里 Perl 和 Python 真的没有区别。就像在 Python 中一样,在 Perl 中加载文件作为模块执行它。
但是就像在 Python 中一样,您可以检查模块是否作为脚本在 Perl 中执行。
# Python
if __name__ == "__main__":
main()
# Perl
main() if !caller();
这样的文件称为“modulino”。
也就是说,我不喜欢这种做法(无论哪种语言)。如果你想要一个模块,写一个模块。这只是我的意见。
嘿,很久以前我不得不为人们转换一堆东西时为此制作了一个工具:scriptdist。这是在程序上使用 Perl 工具链的快速修复。
然后的诀窍是能够加载脚本而不做任何事情,直到你的测试要求它,这就是
我已经写了很多相关内容: