【问题标题】:How to call an individual method from another python module which has got a main function in it如何从另一个具有主要功能的python模块调用单个方法
【发布时间】:2017-12-04 07:28:00
【问题描述】:

我有一个 python 模块,例如:myexample.py,内容如下。

import os, sys
class nw_clss():
    def new_func():
        /*some statements*/

def main():

main(some arguments)

现在正在编写一个单元测试框架,我需要在 myexample.py 中调用一些单独的函数。 然而,由于 myexample.py 中有一个 main 方法,每当我试图调用一个单独的函数时,框架实际上是在调用 main 方法并执行 myexample.py 中所有可用的方法

有没有可能覆盖它并调用各个方法。

谢谢, 阿琼

【问题讨论】:

  • 如果你import myexample as me,你不能只做x=me.nw_class(), x.new_func()吗?
  • 这又给出了同样的错误。主要方法被调用而不是 x.new_function()
  • 使用下面的if __name__ == '__main__':
  • 非常感谢亨利,这工作:)

标签: python unit-testing methods main


【解决方案1】:

这就是目的

if __name__ == '__main__':
    main()

你可能不时看到。

当你直接运行一个模块时,它的__name__变量将是'__main__',但是如果被另一个模块导入就不一样了,所以像这样的块中的代码只会在该模块直接运行时执行。

编辑:澄清一下,你想要的是

import os, sys
class nw_clss():
    def new_func():
        /*some statements*/

def main():
    pass

if __name__ == '__main_':
    main(some arguments)

编辑 2:来自 cmets

如果您只想测试模块的 1 部分(例如类),则在您的 unittest 模块中,您只能导入:

from myexample import nw_clss

它不会运行整个模块。用良好的习惯编写代码不太好,但如果出于某种原因编写原始代码的人不会让你这样做,那么我想这就是你必须做的。

【讨论】:

  • 好的。但我没有更改 main() 的选项。这是因为,main() 被另一个 java 代码引用。所以我唯一的选择是单独调用这些方法并执行它以进行单元测试。
  • @Arjun 我不明白你的意思,你的java代码是如何引用这个python模块的?进行我建议的更改导致的确切问题是什么?
  • python 模块 myexample.py 实际上被一段 java 代码引用以实现某些功能。所以不幸的是,我无权更改 myexample.py 中的任何代码。我能改变的只是单元测试用例的运行方式。在我的 unittest 案例中,我正在实例化 myexample.py 模块类的对象 - nw_clss 并尝试调用特定函数。这种调用方法的方式失败并显示错误消息,指出 main 需要 9 个参数,并且只传递特定于特定函数的 4 或 5 个参数。
  • @Arjun 你的意思是这个java代码正在调用myexample.py吗?我真的不知道这将如何工作,但我认为这意味着 java 将向 shell 发送命令以运行“python myexample.py”。如果是这样,那么我的更改将不起作用。这也是非常标准的良好做法,因此无论哪种方式都应该这样做。
  • @Arjun 但您也可以(我认为)只导入该类,但使用 from myexample import nw_clss 对其进行测试 - 我认为这不会调用 main() 函数。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
相关资源
最近更新 更多