私はPython 2.7を使ってゲームを作成しています。私は私のメインファイル内のメソッドをチェックするためにテストスクリプトを使用したいが、私はわずかな問題に走っている。Python 2.7 - テストスクリプトがraw_inputをシミュレートします
メインスクリプトでは、ユーザーがraw_input()
を使用してゲームをプレイするかどうかを尋ねます。残念ながら、これは、Windows PowerShellを使用してテストスクリプトを実行すると、コンソールからユーザーに入力が求められ、手動で回答を入力する必要があることを意味します。繰り返しテストを行うと、手入力が面倒になっています。
(MWEと出力:ここでは、テストスクリプトはメソッドをチェックするだけであり、ゲームプレイ自体ではないため 'n'を生成する必要があります)実際のメソッドは計算を行い、文を出力し、 )
これは私の質問に私をもたらします: 自動的raw_input()
のための入力を生成するテストスクリプトを書くためのいくつかの方法はありますか? 代わりに、テストスクリプトがシミュレートできるメインゲームファイルのユーザー入力を受け入れる他の方法がありますか?
思考:答えを探している間は、私は約mock
...私はその前に使用していないいくつかの情報を見てきたともモックは、特定のステートメントからの結果を主張するようだが、ちょうど私テストファイルが効果的にそのプロンプトをバイパスするようにします。 ...
MWE.py(ゲームファイル)
def game_method(stuff):
"""Calculates stuff for game"""
stuff_out = 'foo'
return stuff_out
""" Check user wants to play the game """
startCheck = raw_input('Would you like to play the game? (y/n) > ')
if (startCheck.lower() == 'y'):
play = True
else:
play = False
""" Set up a game to play"""
while (play==True):
# Do stuff
stuff_out = game_method(stuff)
else:
print "\n\tGoodbye.\n\n"
MWE-テストを私はただのゲームスクリプトからその(Y/N)プロンプトを削除することもできますが、これは良い学習機会のように思えます。 PY(テストスクリプト)
import MWE
def check_game(input):
string_out = MWE.game_method(input)
return string_out
""" Test code here """
input = 7
string_output = check_game(input)
print "===============\n%s\n===============\n\n\n" % (string_output == 'foo')
コンソール出力は:
PS C:\dir> python MWE-test.py
Would you like to play the game? (y/n) > n
Goodbye.
===True===
PS C:\dir>
私にはわからないテスト・スクリプトからのテスト・スクリプトからの引数を持つ
[StringIO](https://docs.python.org/2.7/library/stringio.html)オブジェクトを作成し、 'sys.stdio'をそれに置き換えることを検討してください。 –
@AustinHastings私はStringIOのアイデアが初めてです。それは、入力を引っ張ったり、出力をファイルに書き込んだりするように思えます。しかし、そこから引き抜く方法はわかりません。代わりに 'raw_input()'をStringIOに再定義する必要がありますか?どこでそれを定義しますか?それはメインファイルかテストファイルの中に入りますか?私はゲームファイルをそのままの状態にしておくことを望んでいます。あるいは、一般的にどんなマシンでも動作するように、ゲームファイルを変更したいと考えています。思考?もっと情報を私に提供してもらえますか? – user2441511