1

在我的 Python 单元测试(通过标准的鼻子测试/unittest.TestCase)中,我有一个类,我在其中创建了一个进行选项解析的方法。我想编写一个很好的单元测试例程来很好地练习它。

更重要的是,下面有 4 个问题,我正在寻找最佳的方法来做到这一点。... ?

from optparse import OptionParser

class Something(object):

    def getOptionParser(self):
        return OptionParser()

    def parseMyOptions(self):
        parser = self.getOptionParser()
        parser.add_option('--debug',    action='store_true', help='Run debug mode.')
        parser.add_option('--logfile',  default='log/logfile.log', help='what filename')
        parser.add_option('--url',      type='string', help='desired url')
        (options, args) = parser.parse_args()
        self.debug          = options.debug
        self.logfile        = options.logfile
        self.url            = options.url

    def main(self):
        self.parseMyOptions()

class MockOptionParser(object):
      def __init__(self):
          self.url = None
          self.debug = None
          self.logfile = None
      def add_option(self, *args, action=None, help=None, default=None):
          pass
      def parse_args(self):
          pass
      def error(self):
          pass

class TestSomething(unittest.TestCase):
    def test_something(self):
        s = Something()
        s.getOptionParser = MockOptionParser()
        s.parseMyOptions()
        assert True, "assert something useful?"

所以这里的问题是:

  1. 我能断言什么有用的东西?

  2. 如何在不复制 OptionParser 骨架的情况下自动生成 MockOptionParser?

请注意,在 MockOptionParser 的 add_option 中,我不处理 'type' 关键字,但我应该处理。我确信我不会预测 OptionParser 使用的所有方法和关键字 args 并在 MockOptionParser 中实现它们。 有没有更简单的方法?

  1. 使用每个选项的自变量初始化 MockOptionParser 是丑陋的。有没有办法很好地做到这一点?

  2. 有没有一种简单的方法来验证所有 add_option() 变量(例如 options.debug)是否用于设置 self.debug 之类的东西?

4

0 回答 0