通过命令行运行unittest.TestCase中的单个测试

10 浏览
0 Comments

通过命令行运行unittest.TestCase中的单个测试

在我们的团队中,我们通常这样定义大部分的测试用例:

一个“框架”类ourtcfw.py

import unittest
class OurTcFw(unittest.TestCase):
    def setUp:
        # 做一些操作
    # 其他我们想要在各处使用的内容

以及很多像testMyCase.py这样的测试用例:

import localweather
class MyCase(OurTcFw):
    def testItIsSunny(self):
        self.assertTrue(localweather.sunny)
    def testItIsHot(self):
        self.assertTrue(localweather.temperature > 20)
if __name__ == "__main__":
    unittest.main()

当我写新的测试代码时,希望经常运行并节省时间,我会在其他所有测试方法前加上“__”。但是这很繁琐,让我分心于我正在编写的代码,而且这会产生很多不必要的提交噪音。

因此,例如,当对testItIsHot()进行更改时,我希望能够这样做:

$ python testMyCase.py testItIsHot

并且只运行testItIsHot()

我该如何实现这个目标?

我尝试重写if __name__ == "__main__":部分,但由于我对Python还不熟悉,我感到迷茫,总是碰到其他方法而不是我想修改的部分。

0
0 Comments

问题的出现原因是当使用命令行运行`unittest.TestCase`中的单个测试时,需要按照特定的命令格式。如果按照实际代码的组织方式进行测试用例的组织,并且在同一个包中使用相对导入的方法导入模块,就可以使用以下命令格式:

python -m unittest mypkg.tests.test_module.TestClass.test_method
# 在你的情况下,应该是:
python -m unittest testMyCase.MyCase.testItIsHot

解决方法是按照上述命令格式在命令行中运行相应的测试用例。这种方式更加符合Python 3文档中的要求。

然而,这种命令格式看起来非常冗长,类似于Java的风格。“long_module_name.SameLongNameAsAClass.test_long_name_beginning_with_test_as_a_convention”,这样的命名方式可能不太符合一般的代码模块化思维,特别是当按照模块组织测试用例时。

Python 3的文档提供了关于命令行界面的详细说明,可以参考文档:Command-Line Interface

0
0 Comments

原因:问题的原因是作者在使用unittest.TestCase通过命令行运行单个测试时,遇到了困难。

解决方法:作者提出了两种解决方法。第一种方法是直接在命令行中运行单个测试,使用的命令为python testMyCase.py MyCase.testItIsHot。第二种方法是在代码中创建一个测试套件,然后运行该套件中的指定测试。具体代码如下:

suite = unittest.TestSuite()
suite.addTest(MyCase("testItIsHot"))
runner = unittest.TextTestRunner()
runner.run(suite)

作者还补充了一点,如果想要运行整个TestCase类,可以省略测试套件部分,直接使用runner = unittest.TextTestRunner(),然后跟上runner.run(unittest.makeSuite(MyCase))

这样,作者解决了通过命令行运行单个测试的问题,并且提供了两种不同的解决方法,方便读者选择使用哪种方法来解决类似的问题。

0
0 Comments

在使用命令行运行unittest.TestCase的单个测试时,出现了以下问题:

问题原因:指定类名和方法名时,只有方法名以"test"开头才能正常运行。如果方法名不是以"test"开头,无法使用该方法运行被禁用的测试。

解决方法:如果测试文件位于子目录中,需要在子目录中创建一个空的`__init__.py`文件,并使用`test`作为前缀来调用测试方法。

然而,有一些用户表示这种方法并不起作用,他们找到了其他解决方法。有一个用户提到了创建`__init__.py`文件,但没有提供具体的步骤和代码。另一个用户表示在尝试使用该方法时出现了错误,错误信息为"module testMyCase has no path",但没有提供解决方法。

尽管有一种方法可以通过命令行运行unittest.TestCase的单个测试,但该方法有一些限制和问题,需要根据具体情况进行调整和解决。

0