私は、実行時間の長い実行スレッド、イベントをポーリングしたり、他のイベントを起動させたりするコードのBLOBを持っているとします(私の場合は、XMLRPC呼び出しを使用します)。それは単体テストすることができるようにクリーンなオブジェクトにリファクタリングする必要がありますが、その間に、いくつかの統合テストでは現在の動作の一部をブラックボックスのように扱いたいと思っています。たとえば、次のようにPythonコードをスレッドで修正せずにテストしていますか?
# long-lived code
import xmlrpclib
s = xmlrpclib.ServerProxy('http://XXX:yyyy')
def do_stuff():
while True:
...
if s.xyz():
s.do_thing(...)
_
# test code
import threading, time
# stub out xmlrpclib
def run_do_stuff():
other_code.do_stuff()
def setUp():
t = threading.Thread(target=run_do_stuff)
t.setDaemon(True)
def tearDown():
# somehow kill t
t.join()
def test1():
t.start()
time.sleep(5)
assert some_XMLRPC_side_effects
最後の大きな問題は、テスト対象のコードがCtrlキーを押しながらCまで、永久に実行するように設計された、と私は強制的にどのような方法が表示されないということです私はテストしているコードを変更せずに、最初からそれを起動することができるように、例外を発生させるか、そうでなければスレッドを終了させます。私はテスト中の関数を呼び出すとすぐにスレッドからフラグをポーリングする能力を失います。
私はこれがということを知っています。実際にテストがどのように動作するように設計されているか、統合テストは限られた価値などではありませんが、私は軽く働くことによってテストとデザインの価値を、一度に彼のソフトウェアを完全に再設計するのではなく、
すべての有効な点がありますが、私が良い開発実践に関する一般的なアドバイスを探していた場合は、この質問にロジスティクスに関する質問はありませんでした。 –
@Mu Mind:わかりやすい単純な解決策があれば、「良い開発実践に関する一般的なアドバイス」を提供していないでしょう。 –