pythonunittest:如何重用测试用例.断言功能

2024-06-09 06:43:57 发布

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

我正在写一个unittest.TestCase为了抽象我们代码的一些细节,我想使用我自己的assert函数,但是我需要将这个assert结果报告给测试结果。我试图重用unittest assert函数,如下所示:

class MyTestCase(unittest.TestCase):
    def assertState(state, value):
        if state_dict[state] == value:
            self.assertTrue(True)
        else:
            self.assertTrue(False)

问题是我的MyTestCase实例中的asserrState调用将报告assertError,而不是向testresult对象报告错误。在

请建议我如何在的子类中编写自己的assert函数unittest.TestCase. 在

编辑: 我想要完成的是提供我们自己的MyTestCase类作为基类,其中包含更多带有业务逻辑的assert函数。这样,真正的测试只需将MyTestCase子类化并使用这些断言,而不必重复相同的代码。这意味着我想打电话给你MyTestCase.assertState在MyTestCase的一个子类中,仍然向具体的测试结果报告测试失败。像下面这样的。在

^{pr2}$

如果有办法的话,请告诉我。在


Tags: 函数代码selfvalue报告assertunittest子类
3条回答

很晚才回复,但最终还是找到了一个解决方案,因为我在定义自己的TestCase子类时遇到了同样的问题。这可能会对其他人寻找同样的东西有所帮助。在

您只需在定义类的模块中添加__unittest = True。在

import unittest

__unittest = True

class MyTestCase(unittest.TestCase):
    def assertState(state, value):
        if state_dict[state] != value:
            standardMsg = 'the state %s does not match %s' % (state, value)
            self.fail(self._formatMessage(msg, standardMsg))

现在,用户定义的assert方法的行为将与unittest.TestCase一个,失败时不会显示不需要的堆栈跟踪。在

适用于Python2.7

来源:http://www.gossamer-threads.com/lists/python/python/1014779

class MyTestCase(unittest.TestCase):
  def assertState(self, state, value):
    self.assertEqual(value, self.state_dict[state])

  def test_whatever(self):
    self.assertState(1, 1)
    self.assertState(2, 2)

首先,您忘记了self参数。其次,你是如何运作的?如果您真的想要测试结果对象,那么您可以这样做:

In [1]: import unittest

In [2]: state_dict = {1:2}

In [3]: class MyTestCase(unittest.TestCase):
   ...:         def assertState(self, state, value):
   ...:             if state_dict[state] == value:
   ...:                 self.assertTrue(True)
   ...:         else:
   ...:                 self.assertTrue(False)
   ...:     def runTest(self):
   ...:         self.assertState(1,2)
   ...:         self.assertState(1,1)
   ...: 

In [4]: r = unittest.TestResult()

In [5]: MyTestCase().run(r)

In [6]: r
Out[6]: <unittest.TestResult run=1 errors=0 failures=1>

In [7]: r.errors
Out[7]: []

In [8]: r.failures
Out[8]: 
[(<__main__.MyTestCase testMethod=runTest>,
  'Traceback (most recent call last):\n  File "<ipython console>", line 9, in runTest\n  File "<ipython console>", line 6, in assertState\nAssertionError\n')]

相关问题 更多 >