###質問
Pythonではunittestモジュールを使ったユニットテストが一般的なテスト方法だと思います。調査した所、関数、あるいはクラスへのテストはunittestモジュールでできることはわかりました。
ただ、unittestを使って標準入出力を含む「1つの.pyファイルへのテスト」ができるのかが分かりませんでした。
このような場合は、どのようにテストすれば良いのか(どんなテストモジュールならいけるか)ご存知でしたらご教示願えますでしょうか?
###具体的な例
下記のようなname.pyファイルがあり、標準入力値"wanko"で標準出力"wanko wanko"が期待されているという状況があった場合、どんなテストモジュールを使ってテストをやればよいか?
python
1#name.pyのコード 2name = input() 3print(name,name)
###質問の背景
Pythonビギナーです。
現在paizaでPyhonのコードのオンラインジャッジを行っております。
オンラインジャッジのシステムでは標準入力を受け取り、標準出力へ正しい結果が出ているかを判定しております。提出コードへ変更を加えずにテストを行いたいと考えており、この度質問いたしました。
###試したこと
自作でsubprocessとPepoenを利用しstdin,stdoutを操作して、
ファイルに対してテストができるコードを書きましたが、なんというか車輪の再開発感がもりもりしています。
つらいです。
python
1#ファイルに対してテストを行うモジュール 2import subprocess 3from subprocess import Popen,PIPE 4 5# -------ここから変更-------- 6#テストを行うファイル名 7test_filename = "name.py" 8 9#""" """の間に標準入力テストデータを貼り付ける 10input_d =""" 11wanko 12""" 13#""" """の間に期待する標準出力結果を貼り付ける 14expect_d = """ 15wanko wanko 16""" 17# -------ここまで-------- 18run_cmd = "python " + test_filename 19 20input_d = input_d[1:] # スライスで行頭削除 : 改行単位でinput()が実行される 21expect_d = expect_d[1:] # スライスで行頭削除 : stdoutは行末に改行を含む 22 23p = Popen(run_cmd, 24 stdin=PIPE,stdout=PIPE,stderr=subprocess.PIPE, 25 universal_newlines=True) 26 27p.stdin.write(input_d) # stdin実行 28stdout = p.communicate()[0] # stdout取得 29 30#結果の表示 31print("[{} stdout]\n{}".format(test_filename,stdout)) 32print("[expect]\n{}".format(expect_d)) 33 34if(expect_d != stdout): 35 print("***TEST NG***") 36else: 37 print("!!!TEST OK!!!")
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/04 07:14