Python: Как мне полезно протестировать метод, вызывающий OptionParser?

В моих модульных тестах 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. Как автоматически сгенерировать MockOptionParser без воспроизведения скелета OptionParser?

Обратите внимание, что в add_option в MockOptionParser я не обрабатываю ключевое слово type, но я должен это делать. Я уверен, что не буду предсказывать все методы и аргументы ключевых слов, которые использует OptionParser, и реализовывать их в MockOptionParser. Есть ли более простой способ?

  1. Инициализация MockOptionParser с собственными переменными для каждого параметра является УГЛОВОЙ. Есть ли способ сделать это красиво?

  2. Есть ли простой способ убедиться, что все переменные add_option() (например, options.debug) используются для установки чего-то вроде self.debug?

0 ответов

Другие вопросы по тегам