【问题标题】:unit testing protected class methods in python?在python中对受保护的类方法进行单元测试?
【发布时间】:2016-03-21 19:08:25
【问题描述】:

我正在尝试导入一个类,而不是通过传入值 'stage'、'prod' 来测试该类中的方法 (production_warning) 以查看它是否返回预期结果。

import runner
test=runnerData(force_redeploy=False, pfactor=None, preview=True)

def production_warning_test():
    assert.test.production_warning('stage') not errors
    assert.test.production_warning('prod') contains "warning"

#run unit test
productionwarningtest()

我显然在这里完全错误地使用了断言,我该如何正确地完成我想要用断言做的事情。

【问题讨论】:

  • Python中没有“受保护的类方法”之类的东西。

标签: python unit-testing assert


【解决方案1】:

要使用断言执行此操作,您需要将断言语句更改为:

assert test.production_warning('stage') is not errors
assert test.production_warning('prod') contains "warning"

我强烈建议您改用 python unit test 模块。

在这种情况下,您需要这样的东西(注意 runnerData 需要在范围内,我只是从您上面的问题中复制):

import runner
import unittest

class TestRunner(unittest.TestCase):

  def setUp(self):
      self.test = runnerData(force_redeploy=False, pfactor=None, preview=True) 

  def test_production_warning(self):
      self.assertTrue(self.test.production_warning('stage') is not errors)
      self.assertTrue(self.test.production_warning('prod') contains "warning")

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

【讨论】:

  • 这实际上是我想要的,我正在尝试使用 unittest,从阅读文档中我无法找出使用 unittest 完成这两行的最干净的方法
  • 我已经扩展了答案,以使用 unittest 举个例子 - 希望这会有所帮助。
  • 我可以做同样的事情,但不上课吗?
  • 没有 TestRunner 类?
  • 不适用于 unittest - unittest 提供的各种 assertTrue 等类型函数都是 unittest.TestCase 的方法,并期望 self 作为它们的第一个参数。如果你真的需要避免使用一个类,那么你可以回到简单的断言——你最了解你的场景,所以选择最适合这种情况的工具。
猜你喜欢
  • 2017-06-24
  • 2010-11-10
  • 2012-02-22
  • 2019-05-07
  • 2021-05-31
  • 2015-02-26
  • 2010-09-21
  • 2016-11-22
  • 2013-10-10
相关资源
最近更新 更多