Pythons mock.patch kullanıyorum ve her çağrı için dönüş değerini değiştirmek istiyorum. İşte uyarı: yamalanan fonksiyonun hiçbir girişi yoktur, bu yüzden girişe göre dönüş değerini değiştiremiyorum.
İşte referans için kodum.
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')
Test kodum:
@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
"input" un platformdan bağımsız (python 2 ve 3) versiyonudur. Nihayetinde ben kullanıcıların giriş alay etmeye çalışıyorum. Dönüş değeri için bir liste kullanarak denedim, ama bu işe yaramaz.
Dönüş değeri geçersizse, burada sonsuz bir döngü alacağımı görebilirsiniz. Bu yüzden sonunda testimin bitmesi için dönüş değerini değiştirmenin bir yoluna ihtiyacım var.
(bu soruyu cevaplamanın bir başka olası yolu, bir birim testindeki kullanıcı girişini nasıl taklit edebileceğimi açıklamak olabilir)
Bu sorunun bir kopyası değil değil, çünkü girişleri değiştirme yeteneğim yok.
Bu soruya verilen cevabın yorumlarından biri aynı çizgidedir, ancak cevap / yorum yapılmamıştır.
is
Dize değişmezlerini karşılaştırmak için kullanmaya çalıştığınız anlaşılıyor . Bunu yapma. Çalışması (bazen) sadece CPython'da bir uygulama detayıdır. Ayrıca, response is not 'y' or 'n' or 'yes' or 'no'
muhtemelen düşündüğünüzü yapmıyor ...
response is not 'y' or 'n' or 'yes' or 'no'
içinde değil sen öyle bildiğini yapmak. Bkz. Bir değişkeni birden çok değere karşı nasıl test ederim? ve gerektiği değil kullanmakis
dize değerleri, kullanımını karşılaştırmak için==
karşılaştırma değerleri değil, nesne kimlikleri.