ファイルパスを取得し、ファイルの内容の一部を返す構文解析関数をユニットテストしようとしています。私はテスト目的のためにこれらの関数の文字列を渡すことができるようにしたいと思います。Unittesting - ファイルパスをStringIOオブジェクトに置き換える
StringIOまたはfile_handle(例:csv.reader StringIO( "my、data")またはcsv.reader(open(file))のいずれかをpas csv.reader()できますが、 open(StringIO( "my、data"))が失敗したので、ファイルパスの代わりにStringIOオブジェクトを渡すことができます。同様に、これらの解析メソッドではなく、これらの解析メソッドでファイルを開くそのように私のコードの主要な大部分は私のメインのコードを乱雑にしても、私はすべてのファイルIOインタフェースを再記述する必要が意味するであろう
私の選択肢があるようだ!
- リライトのすべてのEXIコードを解析してファイルハンドルを解析関数に渡すようにしてください - これは本当の苦痛です!
- open()メソッドを置き換えるにはmock.patch()を使用します。これはうまくいくはずですが、このタスクよりも複雑に思えます!
- 私はまだ考えていないことをしていますが、確信していなければなりません!
import csv
def parse_file(input):
with open(input, 'r') as f:
reader = csv.reader(f)
output = []
for row in reader:
#Do something complicated
output.append(row)
return output
import unittest
class TestImport(unittest.TestCase):
def test_read_string(self):
string_input = u"a,b\nc,d\n"
output = read_file(string_input)
self.assertEqual([['a', 'b'], ['c', 'd']], output)
def test_read_file(self):
filename = "sample_data.csv"
output = read_file(filename)
self.assertEqual([['a', 'b'],['c', 'd']], output)
ハードディスクにテストケースを書き込み、それらにパスを渡すのはなぜですか? –
これはコードが現在どのように動作しているかを示しています。私はこれを避けようとしています: ** **本当に小さなテキストファイルをたくさん追跡したくありません。 ** B **解析には設定オプションがたくさんあります - これらをシミュレートするためにコード内の文字列を操作するのは簡単ですが、ファイルでこれを行うには数十回の時間がかかります。 – David258