3

ライブラリを使用してPythonでテストを書いていunittestます。異なるテストデータを持ついくつかのテスト環境があります。

  • テスト参照データを保存する最良の方法は何ですか ('test*.py' ファイルに保存したくありません)?
  • 特別な形式 (メソッドを呼び出す入力値、比較する出力値) で保存する良い方法はありますか?

何か案は?

4

2 に答える 2

1

カスタム ストアからデータを取得して実際のテスト関数に渡すデコレータを作成できます。私は過去にこれをやった:

デコレータ

from functools import wraps

def data_provider(fn_dp):
  def test_decorator(fn_test):
    @wraps(fn_test)
    def wrapper(self, *args, **kwds):
      for data in fn_dp():
        try:
          fn_test(self, **data)
        except AssertionError, e:
          raise(AssertionError('{0} - [{1}]'.format(e, data)))
    return wrapper
  return test_decorator

これで、ユニットテストを次のように記述できます。

data = lambda: (
  {
    'input': '1234',
    'expected_op': '1234'
  },
  {
    'input': '1234',
    'expected_op': '1234'
  }
)

@helper.data_provider(data)
def test_something(self, input, expected_op):
  self.assertEqual(input, expected_op)

これで、デコレータはすべてのデータ ポイントに対してテスト関数を呼び出します。

特定のケースについては、 を参照しfn_test(self, **data)data_providerください。代わりに**data、カスタム ストレージから読み取り、ここからテスト関数を呼び出すことができます。

于 2012-04-24T11:56:43.503 に答える