如何使用PyCharm运行doctests?

时间:2015-03-24 19:04:49

标签: python intellij-idea pycharm doctest

在PyCharm IDE中,如果我右键单击带有doctest的函数/方法,有时右键单击菜单会给我选项:" 运行' Doctest my_function_name&#39 ; "有时,右键单击菜单只提供运行整个文件的选项(不作为doctest)。

什么时候决定什么时候才能提供"运行doctest"选项何时不会?有没有办法以某种方式强迫它?

3 个答案:

答案 0 :(得分:11)

通过Run ConfigurationPyCharm中运行模块(或其中的测试)。右键单击模块后,PyCharm将搜索该模块的现有Run Configuration。如果找到配置(这可能是由于之前的运行或手动创建Configuration),PyCharm将仅建议运行该配置。

例如,如果创建了module.py的配置来运行其doctests,那么右键点击module.py时我们会看到这个选项。但是,如果未找到任何配置,PyCharm建议在不同的选项中运行模块,具体取决于模块中的代码(定期运行,或运行doctests / unittests)。选择一个选项后,PyCharm会隐式创建相应的临时Run Configuration。从这里开始,当右键单击模块时,您将只获得为该模块创建的配置。

重要的注意事项: PyCharm最多可以保存6个临时(即通过运行模块创建的ConfigurationsRun Configurations - 3" Python&# 34 ;,即脚本,以及3" Python测试"。这意味着,如果您运行moduleA.pymoduleB.pymoduleC.py,然后moduleD.py,则PyCharm中的临时Configurations将为moduleB.py,{ {1}}和moduleC.py。除非明确保存,否则moduleD.py的配置将自动删除。

此行为可以重现如下:

  1. moduleA.py中,创建一个新的Python模块:" temp"
  2. 2.将以下内容添加到模块中:

    PyCharm
    1. 右键单击doctest部分,可以选择"运行' Doctests in temp' "
    2. 右键单击部分,可以选择"运行' temp' "
    3. 选择其中任何一个选项,使其他选项在后续运行中消失。例如,选择运行模块将使后续运行中 Doctests 的选项消失,反之亦然。 回到可以在两个选项之间进行选择的第一阶段,可以通过删除模块"运行配置":
    4. 运行 - >编辑配置 - >找到模块的当前配置(通常突出显示) - >点击"减号"按钮(左上角) - >点击"应用" - >单击确定。 现在我们回到第3步。

      (转载于""" >>> print 3.14 3.14 """ if __name__ == '__main__': pass 5.0和4.5)

      总结:

      • 如果找不到PyCharm,PyCharm建议以任何可能的方式运行模块(作为脚本,doctests或unittests)
      • 如果找到Run Configuration,PyCharm只会建议Run Configuration
      • 如果PyCharm没有为您提供所需的运行选项,请找到阻止它为您提供该选项的Configuration将其删除,或者创建一个新选项一个将以你想要的方式运行文件或方法/功能的文件。

答案 1 :(得分:6)

如果您不想删除配置,也可以点击Run |的快捷键恢复程序(对我来说是F9)以弹出一个完整的选择列表

答案 2 :(得分:0)

如果上述无效对您没有帮助-请确保您的模块不是 not 名为Fatal Exception: java.lang.SecurityException: Binder invocation to an incorrect interface at android.os.Parcel.nativeEnforceInterface(Parcel.java) at android.os.Parcel.enforceInterface(Parcel.java:597) at android.app.job.IJobService$Stub.onTransact(IJobService.java:53) at android.os.Binder.transact(Binder.java:635) at com.firebase.jobdispatcher.IRemoteJobService$Stub$Proxy.start(IRemoteJobService.java:106) at com.firebase.jobdispatcher.JobServiceConnection.onServiceConnected(JobServiceConnection.java:71) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1694) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1723) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:7000) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) 的模块;这会导致冲突,从而导致异常。