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?"
Итак, проблемы здесь:
Что полезного я могу утверждать?
Как автоматически сгенерировать MockOptionParser без воспроизведения скелета OptionParser?
Обратите внимание, что в add_option в MockOptionParser я не обрабатываю ключевое слово type, но я должен это делать. Я уверен, что не буду предсказывать все методы и аргументы ключевых слов, которые использует OptionParser, и реализовывать их в MockOptionParser. Есть ли более простой способ?
Инициализация MockOptionParser с собственными переменными для каждого параметра является УГЛОВОЙ. Есть ли способ сделать это красиво?
Есть ли простой способ убедиться, что все переменные add_option() (например, options.debug) используются для установки чего-то вроде self.debug?