【问题标题】:PyCharm Nosetests - unrecognised testsPyCharm Nosetests - 无法识别的测试
【发布时间】:2016-11-02 11:36:11
【问题描述】:

我在 PyCharm 和 nosetest 集成中反复遇到各种形式的这个问题。

右键单击无法识别某些测试或类/模块根本不包含鼻子测试。

我已经搜索了很多很多 SO 答案,但仍然没有深入了解。

这是该问题的当前再现。测试的内容并不真正相关,但它正在测试一个围绕 DB 接口的单例包装器。

class MyDBTest(unittest.TestCase):

  def setup(self):
    self.db = db_utils.get_connection(constants)

  def teardown(self):
    db_utils.truncate_all_my_tables(self.db)
    self.db.commit()
    self.db.close()

  def test_same_instance(self):
    other_instance = db_utils.get_connection(constants)
    assert other_instance is self.db

  def test_basic_query(self):
    cur = self.db.cursor()
    sql = "SELECT %s"
    cur.execute(sql, "Test")
    assert cur.rowcount == 1, "Expected one row, got <{0!s}>".format(cur.rowcount)

  def test_reopen_connection(self):
    self.db.close()
    self.db = db_utils.get_connection(constants)
    cur = self.db.cursor()
    sql = "SELECT %s"
    cur.execute(sql, "Test")
    assert cur.rowcount == 1, "Expected one row, got <{0!s}>".format(cur.rowcount)

如果我右键单击测试“test_basic_query”,我会看到上下文菜单选项:“Run Nosetest test_basic_query”,然后单击它确实会运行测试,包括设置和拆卸。

但是,右键单击其他测试只会显示“运行 test_db_wrapper”选项。右键单击“项目”窗格中的文件也仅提供此选项。

使用nosetests3 可执行文件从命令行运行这个文件会做一些更奇怪的事情。它运行所有三个测试,但不运行设置和拆卸。

注意我已经尝试重新排序,重命名测试。我试过从对象继承,什么都没有或 unittest.TestCase。我还有其他看起来完全一样的测试类,它们可以工作。

这只是一个例子,这种情况经常发生在我们身上。这似乎是随机的。

PyCharm 版本是: PyCharm 社区版 2016.1.4 构建 #PC-145.1504,构建于 2016 年 5 月 25 日 JRE:1.8.0_76-release-b198 amd64 JVM:JetBrains s.r.o 的 OpenJDK 64 位服务器虚拟机

【问题讨论】:

  • 请修正你的缩进。
  • 另外,添加到测试的底部if __name__ == "__main__": unittest.main()
  • 缩进已修复。
  • 我没有添加主方法调用。这是我讨厌的反模式。我已经获得了nosetests3 可执行文件来运行测试,包括通过将类名更改为:TestMyDB 我相信触发器是它以Test 开头。 PyCharm 仍然无法识别测试。
  • 此外,如果我运行 PyCharm 文件夹中的所有测试并运行它,那么只有文件中的集成被破坏了。

标签: python pycharm nose


【解决方案1】:

到目前为止,我发现以下是防止上述情况发生的方法:

  1. 测试类名应以“Test”开头,例如“TestFoo”
  2. 测试文件名应以 test 开头,例如 test_my_class.py
  3. 测试方法应以单词 test 开头,例如“test_no_results(self)”。同样,非测试方法不应包含测试、设置或拆卸(为简单起见) - create_test_data(self):例如
  4. PyCharm 可能有点奇怪,并且可能需要一段时间才能识别您对测试类所做的更改,因此如果您通过从命令行执行“nosetests”来验证测试(包括设置和拆卸)运行但不起作用在 PyCharm 中尝试重新启动 PyCharm 并清除缓存。
  5. 您无需扩展 unitest.TestCase 即可使用 Nosetest。事实上,这样做会使您在编辑时对 itelisense 和自动完成方法名称的生活变得更加复杂。

【讨论】:

    【解决方案2】:

    如果它之前没有识别它并且它创建了一个运行配置,那么您可能必须删除该运行配置才能将测试检测为测试而不是脚本。查看下拉菜单:

    您应该找到现有运行配置的列表。如果 Pycharm 已经有一个文件名,它会将其视为默认运行配置。 (这很好,因为这意味着您可以创建和保留自定义运行配置)但有时意味着如果您已经将测试文件作为脚本运行,则上下文菜单不会变回。 在该下拉菜单中进行编辑,您可以删除任何现有的运行配置。

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 2012-11-21
      • 2013-03-06
      • 2014-05-21
      • 2021-10-09
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多