是否仅为自动执行禁用Python单元测试?

2024-05-23 22:49:41 发布

您现在位置:Python中文网/ 问答频道 /正文

decorator @unittest.SkipTest防止在测试类中运行单元测试时自动执行单元测试。不幸的是,它也使 PyCharm中的单个执行(通过右键单击函数和 为此测试方法选择Run/Debug)失败,返回TypeError: don't know how to make test from: <function .... at 0x7fbc8e1234c0> 有没有办法禁止单元测试自动(批量)执行 当运行完整的测试类时,但是让它手动执行(最好是PyCharm),这样它就可以运行而不需要在测试文件中做任何更改? 我想 @unittest.skipUnless(condition, reason) 可能会派上用场,但无法提出仅在测试完成时才满足的条件 手工发射。感谢您的建议!你知道吗


Tags: to函数rundebugmakedecorator单元测试unittest
2条回答

您是否尝试过包含在运行CI/CD时设置的参数?可以将默认值设置为false,然后CI/CD将其设置为true。这将给你的条件,你正在寻找。你知道吗

据我所知,区分CI/CD运行和IDE运行的唯一方法是通过一些必须设置的中间参数。你知道吗

编辑: 尝试在PyCharm中为特定测试设置自定义生成配置。您可以将构建配置传递到testsuite的参数中。在这一点上,当您使用命令行vs PyCharm的集成测试运行程序运行测试时,您将有一个适当的条件使此测试不会被跳过。你知道吗

为简单起见,您希望参数的默认值为skip,并且只通过在PyCharm中的特殊构建配置中将True传递给该参数,将布尔值设置为notskip。你知道吗

见:https://www.jetbrains.com/help/idea/build-configuration.html

我会尝试用一个只在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))

从shell运行时,测试确实被跳过:

$ python3 -m unittest test_example.py 
s
                                   
Ran 1 test in 0.000s

OK (skipped=1)

如果选择“编辑配置…”,则可以在测试配置中设置特定的环境变量,如下面的屏幕截图所示。通过此更改,所讨论的测试实际上是在PyCharm中运行的(未显示)。你知道吗

PyCharm unit test configuration showing environment variables set

相关问题 更多 >