Saya menggunakan pythons mock.patch dan ingin mengubah nilai balik untuk setiap panggilan. Inilah peringatannya: fungsi yang ditambal tidak memiliki input, jadi saya tidak bisa mengubah nilai kembali berdasarkan input.
Ini kode saya untuk referensi.
def get_boolean_response():
response = io.prompt('y/n').lower()
while response not in ('y', 'n', 'yes', 'no'):
io.echo('Not a valid input. Try again'])
response = io.prompt('y/n').lower()
return response in ('y', 'yes')
Kode Tes saya:
@mock.patch('io')
def test_get_boolean_response(self, mock_io):
#setup
mock_io.prompt.return_value = ['x','y']
result = operations.get_boolean_response()
#test
self.assertTrue(result)
self.assertEqual(mock_io.prompt.call_count, 2)
io.prompt
hanyalah versi "input" platform independen (python 2 dan 3). Jadi pada akhirnya saya mencoba untuk mengolok-olok input pengguna. Saya telah mencoba menggunakan daftar untuk nilai pengembalian, tetapi itu tidak berhasil.
Anda dapat melihat bahwa jika nilai kembali adalah sesuatu yang tidak valid, saya hanya akan mendapatkan loop tak terbatas di sini. Jadi saya perlu cara untuk akhirnya mengubah nilai kembali, sehingga tes saya benar-benar selesai.
(cara lain yang mungkin untuk menjawab pertanyaan ini bisa dengan menjelaskan bagaimana saya bisa meniru input pengguna dalam unit-test)
Bukan dup dari pertanyaan ini terutama karena saya tidak memiliki kemampuan untuk memvariasikan input.
Salah satu komentar dari Jawaban atas pertanyaan ini sejalan, tetapi tidak ada jawaban / komentar yang diberikan.
is
untuk membandingkan string literal. Jangan lakukan itu. Fakta bahwa ia berfungsi (kadang-kadang) hanyalah detail implementasi dalam CPython. Juga, response is not 'y' or 'n' or 'yes' or 'no'
mungkin tidak melakukan apa yang Anda pikirkan ...
response is not 'y' or 'n' or 'yes' or 'no'
dalam tidak melakukan apa yang Anda pikirkan. Lihat Bagaimana cara menguji satu variabel terhadap beberapa nilai? dan Anda tidak boleh menggunakanis
untuk membandingkan nilai string, gunakan==
untuk membandingkan nilai , bukan identitas objek.