我对Perl非常陌生,但我正试图向Sanoid (https://github.com/jimsalterjrs/sanoid)添加一些功能,它是用Perl作为一个没有.pm模块文件的脚本编写的(据我所理解)。
我想将一些简单的单元测试添加到我添加的一个新的子例程中,我希望能够像在Python中那样简单地完成这一任务,在那里您只需要import
其他文件的名称,并测试来自各种输入的子例程返回值。
我读过一些测试教程,并认为我遵循了如何进行实际测试,但我在导入我想测试的脚本的第一个障碍上挣扎着。
据我所读,导入东西的主要方法是将其转换为.pm模块并将其转化为use
模块,但我不想尝试仅仅为了测试而重新设计某人的代码(特别是当我对Perl如此陌生时)。另一种方法似乎是require
或do
文件,据我了解,该文件将执行该文件(这并不理想,因为即使没有参数调用也是如此),这意味着我需要向文件的末尾添加一个1;
,以确保它在需要时返回true。
看起来,我可以使用unless (caller)
重新排列事情,这样如果是require
d,就不会执行任何操作,但是我想检查一下,我没有遗漏一些明显的东西。
发布于 2022-02-21 21:41:00
这里的Perl和Python实际上没有什么区别。就像在Python中一样,将文件加载为Perl中的模块来执行它。
但是,就像在Python中一样,您可以检查模块在Perl中是否作为脚本执行。
# Python
if __name__ == "__main__":
main()
# Perl
main() if !caller();
这样的文件被称为“模块化”。
尽管如此,我不喜欢这种做法(无论用哪种语言)。如果你想要一个模块,就写一个模块。这只是我的看法。
https://stackoverflow.com/questions/71212667
复制相似问题