Testen argparse mit unbescheidenen und verspotten

Ich habe ein Codebeispiel:

from argparse import ArgumentParser class Wrapper(object): def __init__(self): self.modules = set(['gpfs_server', 'gpfs_client']) self.services = set(['gpfs']) def get_opts(): parse_wrapper = Wrapper() parser = ArgumentParser() parser.add_argument("-i", "--info", dest="show_all", action = "store_true", default=False, help="Show supported services") args, unknown = parser.parse_known_args() args.sub_args = [] if unknown: if unknown[0] not in parse_wrapper.services: unknown.insert(0, 'base') args.service = unknown[0] unknown.remove(unknown[0]) args.sub_args.extend(list(unknown)) return args 

Und ich versuche, Unbescheid dafür zu schreiben.

 from mock import patch, Mock, MagicMock import unittest2 as unittest import parser class TestParser(unittest.TestCase): def setUp(self): pass def tearDown(self): reload(parser) @patch('parser.ArgumentParser') @patch('parser.Wrapper') def test_get_opt(self, wrp, arg): wrp.services = set(['gpfs']) args_mock = MagicMock() arg.return_value.add_argument = MagicMock() arg.return_value.parse_known_args.return_value = (args_mock, ['gpfs', 'status']) result = parser.get_opts() self.assertEqual(result, (args_mock, ['gpfs'])) 

Aber es funktioniert nicht. Zuerst kehrt es Namespace zurück, also wird parse_known_args nicht verspottet. Zweitens scheitert es an Behauptung, da Namespace-Objekt kein Dict hat .

 self = Namespace(service='base', show_all=False, sub_args=['-v', '--cov', 'gpfs', '--junit-xml', './gpfs-coverage.xml', 'gpfs']), other = 'gpfs' def __eq__(self, other): > return vars(self) == vars(other) E TypeError: vars() argument must have __dict__ attribute 

Wo bin ich falsch Wie sollte argparse getestet werden?

Python ist die beste Programmiersprache der Welt.