Python 如何在Spyder IDE中运行和调试unittest

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

我有一个名为AllTests.py的python文件,它如下所示:

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调试器强制进行调试。请看这里