当前位置: 首页 > 面试题库 >

具有基类和子类的Python单元测试

薄龙光
2023-03-14
问题内容

我目前有一些单元测试,它们共享一组通用的测试。这是一个例子:

import unittest

class BaseTest(unittest.TestCase):

    def testCommon(self):
        print 'Calling BaseTest:testCommon'
        value = 5
        self.assertEquals(value, 5)

class SubTest1(BaseTest):

    def testSub1(self):
        print 'Calling SubTest1:testSub1'
        sub = 3
        self.assertEquals(sub, 3)


class SubTest2(BaseTest):

    def testSub2(self):
        print 'Calling SubTest2:testSub2'
        sub = 4
        self.assertEquals(sub, 4)

if __name__ == '__main__':
    unittest.main()

上面的输出是:

Calling BaseTest:testCommon
.Calling BaseTest:testCommon
.Calling SubTest1:testSub1
.Calling BaseTest:testCommon
.Calling SubTest2:testSub2
.
----------------------------------------------------------------------
Ran 5 tests in 0.000s

OK

有没有办法重写上面的内容,这样testCommon就不会调用第一个?

编辑: 而不是运行上面的5个测试,我希望它仅运行4个测试,其中2个来自SubTest1,另外2个来自SubTest2。似乎Python
unittest自己在运行原始的BaseTest,我需要一种机制来防止这种情况的发生。


问题答案:

使用多重继承,因此具有通用测试的类本身不会从TestCase继承。

import unittest

class CommonTests(object):
    def testCommon(self):
        print 'Calling BaseTest:testCommon'
        value = 5
        self.assertEquals(value, 5)

class SubTest1(unittest.TestCase, CommonTests):

    def testSub1(self):
        print 'Calling SubTest1:testSub1'
        sub = 3
        self.assertEquals(sub, 3)


class SubTest2(unittest.TestCase, CommonTests):

    def testSub2(self):
        print 'Calling SubTest2:testSub2'
        sub = 4
        self.assertEquals(sub, 4)

if __name__ == '__main__':
    unittest.main()


 类似资料:
  • 有没有办法告诉Java不要试图从使用基元类型的方法引用中推断类型? 这是我写的一个方法,原因现在无关紧要: 现在,如果您将方法引用传递给返回原始类型的“isEquals”,该怎么办? 这一切都很好,但Java也会接受这种奇怪的用法: 这是因为编译器将推断类型参数T为"

  • 单元测试是一种用于测试应用程序中每个函数的软件开发方法。如果你对此概念不熟悉,或许需要google一下相关概念。 CodeIgniter的单元测试类非常简单,由一个评估函数和两个结果函数组成。它没打算成为一个十全的测试集,只提供一个简单的能够评测你的代码是否可以产生正确的数据类型及结果的解决方案。 初始化单元类 和大多数其它的类一样,在CodeIgniter中,单元测试类一样要在控制器中用函数$t

  • 单元测试是一种为你的应用程序中的每个函数编写测试的软件开发方法。如果你还不熟悉这个概念, 你应该先去 Google 一下。 CodeIgniter 的单元测试类非常简单,由一个测试方法和两个显示结果的方法组成。 它没打算成为一个完整的测试套件,只是提供一个简单的机制来测试你的代码是否 生成了正确的数据类型和结果。 使用单元测试类库 初始化类 运行测试 生成报告 严格模式 启用/禁用单元测试 单元测

  • 问题内容: 基本上,当测试中断或通过时,咆哮通知(或其他回调)。 像这样的东西存在吗? 如果没有,那应该很容易写..最简单的方法是.. 跑 检查要监视的文件是否已被修改(可能只是已保存)。 在这些文件中运行任何测试。 如果测试失败,但在上一次运行中通过,则生成咆哮警报。与失败然后通过的测试相同。 等待,然后重复步骤2-5。 我可以看到的问题是测试是否在其他文件中。一种简单的解决方案是在每次保存后运

  • 问题内容: 我正在寻找在抽象基类中定义的测试方法的方法/最佳实践。我可以直接想到的一件事是对基类的所有具体子类执行测试,但这有时显得有些多余。 考虑以下示例: 是否可以在不进行任何子类化的情况下进行测试? 问题答案: 正如lunaryon所说,这是不可能的。包含抽象方法的ABC的真正目的是,它们不能像声明的那样实例化。 但是,可以创建一个对ABC进行内省的实用函数,并动态创建一个虚拟的非抽象类。可

  • 当我们把类看作一种数据类型时,我们通常认定该类型的对象是要被实例化的。但是,在许多情况下,定义不实例化为任何对象的类是很有用处的,这种类称为 抽象类 (abstract class)。因为抽象类要作为基类被其他类继承,所以通常也把它称为 抽象基类(abstract base class)。抽象基类不能用来建立实例化的对象。 抽象类的惟一用途是为其他类提供合适的基类,其他类可从它这里继承和(或)实现