parser = ParserClass('/path/to/file')
gibi bir dosya adı vererek örnek oluşturduğum bir sınıf var, sonra dosyayı açan ve okuyan parser.parse()
yöntemini arıyorum.
Şimdi kötü bir şey içeride oluyor eğer o birim testi istiyorum:Python'da alaylı bir dosya nesnesiyle birim testi nasıl yapılır?
with open(filename, 'rb') as fp:
// do something
doğru İstisna yükseltilecek, bu yüzden böyle __builtin__.open
alay etmek istiyorum:
from mock import MagicMock, patch
from StringIO import StringIO
test_lines = StringIO("""some test lines, emulating a real file content""")
mock_open = MagicMock(return_value=test_lines)
with patch('__builtin__.open', mock_open):
self.mock.parse()
ama bu bana verir bir AttributeError: StringIO instance has no attribute '__exit__'
.
StringIO, aynen bir dosya nesnesi gibi davranıyor, ama öyle görünüyor, öyle değil.
Bu yöntemi sahte nesnelerle belirli bir içerikle (test_lines) nasıl test edebilirim? Bunun yerine ne kullanmalıyım?
'TypeError: __exit __() tam olarak 1 argüman alır (4 verilen)' – kissgyorgy
@Walkman: Teşekkürler. __exit__' tarafından alınabilecek istisnalardan herhangi birini ele almayacağım için, keyfi bir sayıda argüman almak için güncelledim. Uygun bir uygulama; Herhangi bir özel durumun üstesinden gelip gelmediğini öğrenmek için "open" tarafından sağlanan içerik yöneticisine yeterince aşina değilim veya yalnızca dosyayı kapatır ve herhangi bir özel durumun yeniden yükseltilmesine izin verir. – chepner
[Dokümantasyon:] (http://docs.python.org/2/reference/compound_stmts.html#with) Paket bir istisna nedeniyle çıkıldıysa ve __exit __() yönteminden döndürülen değer yanlış, istisna yeniden. Dönüş değeri true ise, istisna bastırılır ve yürütme, ifadeyi içeren ifadeyle devam eder. – kissgyorgy