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

时间:2016-12-13 01:34:45

标签: 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 theTestSuite

if __name__ == "__main__":
    unittest.main(defaultTest='runAllTestsNow')

我可以在命令行运行它,如下所示:

python -m unittest AllTests

但是,我想使用Spyder IDE来调试一些问题。我知道在Spyder中指定命令行选项,我可以转到Run-> General Setting->命令行选项。但是,当我尝试将“-m unittest”放入这些选项时,我收到错误提示“选项-m无法识别”。它似乎正在尝试将参数发送到AllTests.py文件而不是python。

如何设置Spyder来调试这些单元测试?

7 个答案:

答案 0 :(得分:2)

您可以使用模块spyder-ide / spyder-unittest。

https://github.com/spyder-ide/spyder-unittest

要安装它,请使用:

%{request.toDict}

然后重新启动计算机。打开Spyder。在右上角,您将找到一个新标签:单元测试。点击它。您将看到带有标签运行测试的绿色箭头。这是用于运行测试的按钮。

from the documentation

当您第一次单击箭头时,将弹出一个窗口。您可以通过单击设置齿轮(此面板的左上角)->配置来访问此弹出窗口。

选择测试框架。我假设您已经安装了sudo pip install spyder-unittest 。您应该选择它。其他选项是unitest py.test

在脚本nose所在的位置选择一个文件夹。最佳实践表明,您应该在要测试的脚本所在的文件夹内创建一个名为test_<name>.py的文件夹:

unittests

请记住名称约定,所有包含测试的脚本都应以my_python_scripts_folder/ -> unittests/ test_<name1>.py test_<name2>.py test_<name3>.py <name1>.py <name2>.py <name3>.py 开头。您的脚本test_.py应该如下所示:

tests_

所有测试方法的名称都应以import unittest import sys sys.path.append("../") # this adds the mother folder # "my_python_scripts_folder/" to the python path # It will allow you to import your modules. # Adjust depending where your tests scripts location from <name1> import Stuff class TestClass(unittest.TestCase): def test_ImportFromFile(self): <do stuff with your Stuff> self.assertIsNone(Stuff) self.assert ... etc. 开头。

检查:https://docs.python-guide.org/writing/tests/,了解更多信息。

您可以使用spyde的IDE中的调试工具调试测试脚本

答案 1 :(得分:0)

在iPython控制台中:

!python -m unittest AllTests

起始感叹号使您可以直接访问外壳。

答案 2 :(得分:0)

这篇文章有点老,但是我一直在使用以下内容(由https://stackoverflow.com/users/9450152/%e3%82%ae%e3%83%a7%e3%83%bc%e3%83%a0发表):

  

在iPython控制台中:

!python -m unittest AllTests
     

起始感叹号使您可以直接访问外壳。

我发现您真正需要的是:

!python -m unittests

这将从当前工作目录中发现所有模式为“ test * .py”的测试文件。当前工作目录显示在工具栏中,或者您可以在ipython控制台中键入以下内容:

%pwd

发生的事情是有时我会运行测试文件(通过按F5或单击“运行”箭头)。这会将工作目录更改为该文件所在的目录。然后,上面的命令将仅从该目录开始搜索测试文件(顺便说一句,我浪费了很多时间试图找出答案)。您可以从工具栏更改工作目录(单击向上箭头)或使用:

%cd ..

反复在控制台中,直到到达项目目录。

答案 3 :(得分:0)

很显然,您要么做不到,要么就被打破了,因为目前在spyder-ide存储库中有an open issue,因为它现在是2020年1月9日。

我正在使用spyder-unittest,并且作为解决方法,我将使用调试直接从测试文件中调用测试函数。 所以如果spyder-unittest如果test_file.py包含下面的测试函数

def test_something():
  assert(True)

然后在此函数之后直接调用此测试函数,例如

def test_something():
  assert(True)

test_something() 

并在其上放置一个断点。现在,您无需运行测试文件作为单元测试,只需单击Debug,这将使您的测试文件在调试模式下像普通文件一样运行,这将使您进入测试功能,然后进入具有所有测试数据设置的实际功能。

注意:这种方法在简单的自包含测试用例的情况下将起作用,但是如果您具有复杂的测试设置,则可能无法使用,但是您仍然可以对如何进行测试有一定的认识根据您的情况进行这项工作。

答案 4 :(得分:0)

此功能自Spyder及其单元测试插件中至今不可用。自大约一年以来,该项目的Bugtracker中一直在请求该票,但没有明显的进展:https://github.com/spyder-ide/spyder-unittest/issues/126

作为解决方法,您可以使用以下脚本:

# 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调试器来强制调试。有关文档,请参见此处:https://docs.python.org/3/library/pdb.html

这种方法的优点是不需要修改实际代码。

作为奖励,您可以使用文档(https://docs.pytest.org/en/latest/usage.html)中所有可能的选项作为pytest.main()的参数。

答案 5 :(得分:0)

要在 spyder IDE 中运行单元测试和代码覆盖率,

!python -m unittest programname.py

!coverage run -m unittest programname.py

!coverage report -m

!coverage html 

查看报道html:

  1. 打开保存特定测试程序的文件夹
  2. 打开一个名为“htmlcov”的文件夹
  3. 打开“索引”文件。

答案 6 :(得分:-1)

所以我对Spyder相当新,因为我们使用Visual Studio来做我们的开发,但是这些主体看起来很相似。

那么,我们如何运作如下:

IDE是用于进行开发的界面。 (在你的情况下是Spyder,或者是我的VS.)

Anaconda是(我的)Python环境,它读取并执行python 你写的脚本。这为您提供了解释器窗口等.IDE使用Python环境来运行脚本。

您可以通过几种不同的方式运行测试。

您已经创建了一个名为AllTests.py的包装类/方法,它是一个python脚本。

如您在问题中所述,可以直接在控制台中运行此AllTests.py脚本。

您也可以像任何其他脚本一样运行AllTests.py脚本,如carlos所述。

您还可以在IDE中安装一个插件(Spyder / VS / etc),它解释所有UnitTest类,并以可视方式显示它们,而不是使用命令行。 测试资源管理器(在VS中调用)或替代插件将查看您的代码,找到所有测试,以各种不同的方式将它们组合在一起,允许您按名称/组/等执行它们,并为您提供有关测试及其输出的更多信息。 (执行时间,通过/失败输出等)

我发现Spyder的一个是: https://pypi.python.org/pypi/spyder-unittest

不确定它是否有用,因为我没有使用它。这里的其他人可能能够评论它的能力/表现。

下面是Visual Studio Test Explorer的屏幕截图:

VS Test Explorer

根据您的要求和开发实践,此测试插件可能是您的更好选择。

我希望这会有所帮助。