Python单元测试的参数化跳过:最佳实践?

时间:2017-11-20 22:01:19

标签: python unit-testing python-unittest

我有以下情况:

  • 我有一个"危险模式列表&#34 ;;每个都是一个包含危险字符的字符串,例如"%s with embedded ' single quote""%s with embedded \t horizontal tab"和类似字符(它约有十几种模式)。
  • 要进行每项测试
    • 一次使用不会注入危险字符的香草图案(例如"%s")和
    • 每种危险模式一次。
  • 如果香草测试失败,我们会跳过危险模式测试,假设他们在香草案例失败时没有多大意义。

其他各种限制:

  • 尽可能坚持使用Python中包含的电池(即使unittest有效,nose就足够了。)
  • 我希望尽可能保留unittest.TestCase的合同。即解决方案不应该影响测试发现(可能会发现以test开头的所有内容,但是那里的runTest也可能会在构造中被覆盖,并且会有更多变化)。

我尝试了一些解决方案,我对其中任何一个都不满意:

  • 编写一个抽象类会导致unittest尝试将其作为测试用例运行(因为它像测试用例一样嘎嘎叫)。这可以解决,但代码变得越来越难看。此外,需要覆盖许多函数,对于其中一些函数,文档有点不清楚需要在基类中实现哪些属性。另外,必须复制测试发现,这意味着从unittest内部复制代码。
  • 编写一个执行测试为SubTest的函数,从每个测试函数调用。每个测试功能都需要样板,并且只为整个测试系列提供一个测试结果。
  • 写一个装饰者。避免抽象类方法的测试用例发现问题,但存在所有其他问题。
  • 编写一个取TestCase并返回TestSuite的装饰器。到目前为止,这种方法效果最好,但我不知道是否可以多次添加相同的TestCase对象。或者是否可以复制TestCase个对象(我可以控制所有对象,但我不知道基类在这方面的作用或期望)。

最好的方法是什么?

0 个答案:

没有答案