kullanarak bir işlevi düzeltme Bir test paketim var (burnu kullanarak, değil) ve test sınıfındaki her sınama için belirli bir değerler dizisini döndürmek için bir işlevi yamalamak istiyorum. basitleştirilmiş örneği kullanarak benim ilk girişimi, oldu: yan etkiler bittiğinde ikinci testi başarısız böylece Mock
@patch('time.clock', MagicMock(side_effects=[1, 2]))
class Tests:
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
Ancak MagicMock örneği sadece bir kez oluşturulur. Her bir test yöntemini ayrı ayrı kopyalayabilirim, ama ben gerçekten de yama decorator'unu çoğaltmak istemiyorum (bu örnekte olduğundan çok daha fazla test var!) Bunu yapabilmem için başka bir yol da böyle kurulum kodu:
class Tests:
def setup(self):
self.old_clock = time.clock
time.clock = MagicMock(side_effects=[1, 2])
def teardown(self):
time.clock = self.old_clock
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
Ama tasarruf ve orijinal işlevi tanımı yeniden Mock otomatik yapmak mümkün olmalıdır şey gibi görünüyor. Bunu yapmamın başka bir yöntemi var mı? Yoksa son örneğim bunu yapmanın en iyi yolu nedir?
Burada alıyoruz hiçbir fikrim yok. Soruyu hiç bir şekilde görmüyor gibi görünmüyor ve 'x = [1, 2] .__ iter __().' Yazmanın karmaşık bir yoluna benziyor. Ne demeye çalışıyorsun? – aquavitae
iyi. Bir fonksiyonun alayını yaratmanın bir yolunu istiyorsun. Artık cevapların sırası sende. Yok hayır? x = ["İlk Yanıtınız", "İkinci Yanıtınız", "... vb") .__ iter __() sonraki Sorunu çözer. – Nasgar
Bir yineleyicinin nasıl oluşturulacağını ve bir işlevle nasıl çalıştığını biliyorum. Sorum şu, her test işlevi için sahte cihazı sıfırlamanın kolay bir yolu olup olmadığıydı. – aquavitae