2015-02-25 22 views
6

Testin Python'da py.test kullanarak nasıl yapıldığını öğreniyorum. Ben mock gibi diğer kütüphaneleri kullanırken oldukça yaygın olan belirli bir durumu test etmeye çalışıyorum. Spesifik olarak, bir fonksiyon veya yöntemin doğru argümanlar ile başka bir çağrılabilir çağrıştırdığını test etmek. Geri dönüş değeri gerekli değildir, yalnızca test altındaki yöntemin aramayı doğru şekilde yaptığını onaylayın.Test işlevi pytest ile doğru argümanlar ile nasıl çağrılır?

Burada düz docs gelen bir örnek:

>>> class ProductionClass: 
...  def method(self): 
...   self.something(1, 2, 3) 
...  def something(self, a, b, c): 
...   pass 
... 
>>> real = ProductionClass() 
>>> real.something = MagicMock() 
>>> real.method() 
>>> real.something.assert_called_once_with(1, 2, 3) 

etkili kendi alay sınıf yazmadan, monkeypatch veya py.test den fixtures kullanarak bunu yapmak mümkün mü? Bu özel kullanım durumunu araştırdım, ancak bir örnek bulamadım. py.test, böyle bir kodun alternatif bir yolunu teşvik ediyor mu?

+0

Ünite testi için bu tür temel işlevlerin kutudan çıkmaması garip. –

cevap

1

Eh. Ben iş gibi görünüyor şey ile geldi, ama ben sahte olan benzer varsayalım:

@pytest.fixture 
def argtest(): 
    class TestArgs(object): 
     def __call__(self, *args): 
      self.args = list(args) 
    return TestArgs() 

class ProductionClass: 
    def method(self): 
     self.something(1,2,3) 
    def something(self, a, b, c): 
     pass 

def test_example(monkeypatch, argtest): 
    monkeypatch.setattr("test_module.ProductionClass.something", argtest) 
    real = ProductionClass() 
    real.method() 
    assert argtest.args == [1,2,3] 
+0

Bu yaklaşımı geri dönüş değeriyle nasıl birleştirebiliriz? –

3

Bunun kolay bir pytest fikstür olarak mock paketi kullanmak yapar pytest-mock kullanabilirsiniz.

İlgili konular