【发布时间】: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 文件夹中的所有测试并运行它,那么只有文件中的集成被破坏了。