使用Python测试非Python代码

使用Python测试非Python代码,python,unit-testing,testing,fortran,fortran90,Python,Unit Testing,Testing,Fortran,Fortran90,我们正在用FORTRAN90开发一个数值模拟程序(过程性的,不是面向对象的,不幸的是,存在一些通用块,但没有GOTO:-),并且正在考虑使用Python来帮助我们进行单元测试(追溯)和验证测试。我们希望在Python中设置一个测试环境,以a)进行单元测试,b)进行验证测试(即使用知名的解决方案运行小型测试用例)。我们希望能够将不同的测试分组在一起(通过FORTRAN90程序进行单元测试或通过问题主题进行验证测试),并允许单独或分组运行测试 模拟程序是基于文本输入/输出的,因此我们可以生成一些要运

我们正在用FORTRAN90开发一个数值模拟程序(过程性的,不是面向对象的,不幸的是,存在一些通用块,但没有GOTO:-),并且正在考虑使用Python来帮助我们进行单元测试(追溯)和验证测试。我们希望在Python中设置一个测试环境,以a)进行单元测试,b)进行验证测试(即使用知名的解决方案运行小型测试用例)。我们希望能够将不同的测试分组在一起(通过FORTRAN90程序进行单元测试或通过问题主题进行验证测试),并允许单独或分组运行测试

模拟程序是基于文本输入/输出的,因此我们可以生成一些要运行的输入文件,并与验证的输出文件进行比较。然而,对于单元测试,我想我们可能需要为每个FORTRAN90子例程编写包装

以前有没有人遇到过类似的情况?你能给我们什么建议

谢谢


(顺便说一句,用Python重写FORTRAN90代码(目前)还不是一个选项)

这里有一个链接,可以让您深入了解如何执行任务:

此链接还提供了两个模块的参考-f2pyfwrapf2py的链接似乎已断开,因此您可以参考f2py文档

如果使用“os.system()”函数,可以直接从python脚本调用linux/unix命令。您还可以使用“子流程”模块

像这样使用它:

操作系统(“ls-G”)

这将从python中调用“ls-G”,就像您自己调用它一样。也可以使用此命令轻松编译和调用fortran代码。或者,如果您熟悉bash脚本,也可以将其用作单元测试的包装器。科学计算界似乎喜欢perl来完成这些类型的任务,但python应该可以很好地工作


至少你使用的是fortran90而不是fortran77。这些goto语句会使调试代码变得非常有趣:P

您尝试过吗?为什么不使用
bash
脚本来运行它?您还可以使用GNU自动工具定义自己的测试套件。(我自己从来没有尝试过…)作为替代,您可以看看为Fortran设计的单元测试框架,例如.Python在这里是一个不错的选择。使用pfUnit和FRUIT后,我想说Fortran单元测试框架与其他语言相比开发得不是很好,python具有易用、灵活和平台无关的优势。一般来说,
子流程
模块不是优于
os.system()
现在?我使用f2py的唯一问题是,OP可能需要修改他们的代码,以便使用f2py进行编译,而他们只需要一个单元测试框架。