1

私のPython単体テスト(標準のnosetests / 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 が使用するすべてのメソッドとキーワード引数を予測して、それらを MockOptionParser に実装するわけではありません。 もっと簡単な方法はありますか?

  1. 各オプションの自己変数で MockOptionParser を初期化するのは醜いです。これをうまく行う方法はありますか?

  2. すべての add_option() 変数 (たとえば、options.debug) が self.debug のような設定に使用されていることを確認する簡単な方法はありますか?

4

0 に答える 0