3

小さな自己完結型プログラムの単体テストで Python 3.3 を使用したい、つまり、コマンド ライン部分と「機能」部分に分割したくありません。コマンドライン。

だから私はこの小さなプログラムを持っています:

import unittest

def stradd(a, b):
   return a + b

class test_hello(unittest.TestCase):
   def test_1(self):
      self.assertEqual(stradd("a", "b"), "ab")

unittest.main()
print(stradd("Hello, ", "world"))

残念ながら、unittest.main() がプログラムを終了するため、print() には到達しません。また、終了しなくても、通常の操作では見たくないあらゆる種類の出力を画面に出力します。

エラーがない限り、サイレント モードでテストを実行する方法はありますか? もちろん、何かがうまくいかない場合は、大声で不平を言うべきです。

Run python unit tests as an option of the programを見たことがありますが、それは私の質問にも答えません。

4

3 に答える 3

1

pythonのnosetestsまたはpy.testを使用してください。次に、関数をプログラムに追加してテストを実行するだけで、思い通りにコードを書くことができます。test_

$ nosetests filename.py

また

$ py.test filename.py

また、クラスは必要ありません:

def test():
    assert stradd("a", "b") == "ab"

「静かに走る」部分には答えませんが。私にとって、この + コマンドライン履歴は正常に機能します。小さなプログラムの場合、基本的にはスニペットです。

于 2012-11-25T12:03:35.437 に答える
0

ここで問題になるのはテスト フレームワークではないため、他のテスト フレームワークはここでは役に立ちません。py.testそれが最高のものだと言った:)。

問題は、unittest.main()関数が標準的な方法でテストを実行するように特別に設計されており、このプロセスをカスタマイズする方法を提供していないことです。これにより、2 つのオプションが残ります

  • を使用subprocessして別のプロセスでテストを実行するために使用しunittest.main()、出力を確認して、すべてのテストに合格した場合はプログラムの実行を続行します
  • 高レベルはそのままにunittest.main()して、 unittest モジュールが提供する他の機能を使用します

空き時間ができ次第、これらのオプションの両方について書きます。

于 2012-11-25T23:14:33.270 に答える