装饰器@unittest.SkipTest
阻止在测试类中运行单元测试时自动执行单元测试。不幸的是,这也使
PyCharm中的单个执行(通过右键单击该函数,然后
为该测试方法选择运行/调试)失败,并显示TypeError: don't know how to make test from: <function .... at 0x7fbc8e1234c0>
有没有办法从自动(批量)执行中禁用单元测试
当运行完整的测试类时,却将其手动执行(最好在PyCharm中执行),以便可以运行它而无需在测试文件中进行任何更改?
我想
@unittest.skipUnless(condition, reason)
可能会派上用场,但无法提出仅在测试通过后才能满足的条件
手动发射。任何建议表示赞赏!
答案 0 :(得分:1)
您是否尝试过包含通过CI / CD运行时设置的参数?您可以将默认值设置为false,然后CI / CD将其设置为true。这将为您提供所需的条件。
据我所知,区分CI / CD运行和IDE运行的唯一方法是必须设置一些中间参数。
编辑: 尝试在PyCharm中为该特定测试设置自定义构建配置。您可以让该构建配置将参数传递给测试套件。届时,您将有适当的条件,当使用命令行与PyCharm的集成测试运行程序运行测试时,不要跳过此测试。
为简单起见,您希望参数的默认值是跳过,并且仅通过在PyCharm中的特殊构建配置中将True传递给该参数来将布尔值设置为不跳过。
请参阅:https://www.jetbrains.com/help/idea/build-configuration.html
答案 1 :(得分:0)
我会尝试使用仅在PyCharm或其他IDE中设置的参数来控制它。
也就是说,您可以将skipUnless(...)
用于与PyCharm测试配置中定义的环境变量有关的条件。
这是一个完整的示例:
import os
import unittest
def is_prime(n):
""" Return whether `n` is prime. """
return n == 2 or not (n % 2 == 0 or any(n % i == 0 for i in range(3, n, 2)))
class IsPrimeTest(unittest.TestCase):
@unittest.skipUnless(os.getenv('MYPROJECT_DEVELOPMENT_TEST'), reason="Lengthy test")
def test_is_prime(self):
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertFalse(is_prime(4))
self.assertTrue(is_prime(5))
从外壳运行时,确实跳过了测试:
$ python3 -m unittest test_example.py
s
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK (skipped=1)
如果选择“编辑配置...”,则可以在测试配置中设置特定的环境变量,如下面的屏幕快照所示。进行此更改后,所涉及的测试实际上是在PyCharm中运行的(未显示)。