Python 如何在Spyder IDE中运行和调试unittest
我有一个名为AllTests.py的python文件,它如下所示:Python 如何在Spyder IDE中运行和调试unittest,python,unit-testing,debugging,spyder,Python,Unit Testing,Debugging,Spyder,我有一个名为AllTests.py的python文件,它如下所示: import unittest from SomeWonderfulTest import SomeWonderfulTestCase def runAllTestsNow(): theTestSuite = unittest.TestSuite() theTestSuite.addTest(unittest.makeSuite(SomeWonderfulTestCase) return theTest
import unittest
from SomeWonderfulTest import SomeWonderfulTestCase
def runAllTestsNow():
theTestSuite = unittest.TestSuite()
theTestSuite.addTest(unittest.makeSuite(SomeWonderfulTestCase)
return theTestSuite
if __name__ == "__main__":
unittest.main(defaultTest='runAllTestsNow')
我可以在命令行中运行此命令,如下所示:
python -m unittest AllTests
但是,我想使用Spyder IDE来调试一些问题。我知道要在Spyder中指定命令行选项,我可以转到Run->General Setting->command line options。但是,当我尝试将“-m unittest”放入这些选项时,会出现一个错误,显示为“option-m not recognized”。它似乎试图将参数发送到AllTests.py文件,而不是python文件
如何设置Spyder来调试这些单元测试?因此,我对Spyder相当陌生,因为我们正在使用Visual Studio来进行开发,但是主体看起来很相似 因此,我们的工作原理如下:
python -m unittest AllTests
IDE是用于进行开发的接口。(你是斯派德,我是VS。)
Anaconda是(我的)Python环境,它读取并执行Python
你写的脚本。这将为您提供解释器窗口等。IDE使用Python环境运行脚本
您可以用几种不同的方式运行测试
您已经创建了一个名为AllTests.py的包装类/方法,它是一个python脚本
这个AllTests.py脚本可以直接在控制台中运行,如您在问题中所述
您还可以像运行carlos概述的任何其他脚本一样运行AllTests.py脚本
您还可以在IDE(Spyder/VS/etc)中安装一个插件,该插件解释所有UnitTest类,并以可视化方式显示它们,而不是使用命令行。
测试资源管理器(在VS中称为测试资源管理器)或替代插件将检查您的代码,找到所有测试,以各种不同的方式将它们组合在一起,允许您按名称/组/等执行它们,并为您提供有关测试及其输出的进一步信息。(执行时间、通过/失败输出等)
我为Spyder找到的一个是:
我不确定它是否有用,因为我没有用过。这里的其他人可能会对它的能力/性能发表评论
下面是Visual Studio测试资源管理器的屏幕截图:
根据您的需求和开发实践,此测试插件可能是一个更好的选择
我希望这会有所帮助。您可以使用spyder ide/spyder unittest模块 要安装它,请使用:
sudo pip install spyder-unittest
然后重新启动计算机。打开Spyder。在右上角,您将看到一个新选项卡:单元测试。点击它。您将看到一个标签为运行测试的绿色箭头。这是您将用于运行测试的按钮
当您第一次单击箭头时,将弹出一个窗口。您可以通过单击设置工具(此面板左上角)->配置来访问此弹出窗口
选择测试框架。我假设您已经安装了unitest
。你应该选择它。其他选项有py.test
nose
在中选择脚本test\upy
将位于的文件夹。最佳实践表明,您应该在测试脚本所在的文件夹中创建一个名为unittests
的文件夹:
my_python_scripts_folder/
-> unittests/
test_<name1>.py
test_<name2>.py
test_<name3>.py
<name1>.py
<name2>.py
<name3>.py
所有测试方法的名称都应该以test\uu
开头
检查:了解更多信息
您可以使用iPython控制台中spyde IDE中的调试工具调试测试脚本:
!python -m unittest AllTests
!python -m unittest AllTests
开头的感叹号让您可以直接访问shell。这篇文章有点旧,但我一直在使用以下内容(作者):
在iPython控制台中:
!python -m unittest AllTests
!python -m unittest AllTests
起始感叹号使您可以直接访问shell
我发现你真正需要的是:
!python -m unittests
这将从当前工作目录中发现所有模式为“test*.py”的测试文件。当前工作目录显示在工具栏中,或者您可以在ipython控制台中键入以下内容:
%pwd
有时我会运行测试文件(通过按F5或单击运行箭头)。这会将工作目录更改为该文件所在的位置。上面的命令将只搜索从该目录开始的测试文件(顺便说一句,我花了很多时间试图弄清楚这一点)。您可以从工具栏(单击向上箭头)更改工作目录,或使用:
在控制台中重复执行,直到到达项目目录。很明显,要么您无法执行,要么它已损坏,正如spyder ide repo中关于这一点的内容一样,现在是2020年1月9日 我正在使用并且作为一个解决方法,我将使用debug直接从测试文件调用测试函数。 例如,如果test_file.py包含以下测试函数
def test_something():
assert(True)
然后在此函数之后,直接调用此测试函数,例如
def test_something():
assert(True)
test_something()
并在其上设置断点。现在,不要将测试文件作为单元测试运行,只需点击Debug,这将使测试文件在调试模式下像普通文件一样运行,这将允许您进入测试函数,然后进入实际函数,并设置所有测试数据
注意:这种方法适用于简单的自包含测试用例,但如果您有一个复杂的测试设置,那么它可能不起作用,但您仍然可以获得一些直觉,知道如何在您的用例中实现这一点 该功能目前在Spyder及其单元测试插件中尚不可用。项目的bugtracker中有一张罚单,从大约一年后就开始申请,但没有明显的进展: 作为解决方法,您可以使用以下脚本:
# Entry point for pytest
#
# This allows debugging of pytest unit tests in Spyder (or command line).
# In Spyder, set your breakpoints as required, then run this script
# (no need to debug, run is enough).
# The debugger will break automatically on the pytest.main().
# Continue the execution to jump to your own breakpoints.
import pdb
pdb.set_trace()
pytest.main()
将其保存为“main_pytest.py”,并在Spyder中运行。不需要调试。调试器将在pytest.main()上自动中断。继续执行以跳转到您自己的断点
它使用标准Python调试器强制进行调试。请看这里