ho scritto una funzione che apre un editor vim con il nome specificato quando viene chiamato .. Come posso fare il unittest di questi tipi di operazioni ....Unit Testing una funzione Python che invoca un sottoprocesso vim
risposta
Per testare qualcosa di simile devi prendere in giro/spegnere le tue dipendenze. In questo caso, diciamo che stai avviando vim chiamando os.system ("vim").
Nella tua unit test si può spegnere chiamata di funzione, fare qualcosa di simile:
def launchVim():
os.system("vim")
def testThatVimIsLaunched():
try:
realSystem = os.system
called = []
def stubSystem(command):
if command == "vim":
called.append(True)
os.system = stubSystem
launchVim() # function under test
assert(called == [True])
finally:
os.system = realSystem
Per maggiori dettagli su beffardo e lo sradicamento di dare un'occhiata a this article
Aggiornamento: Ho aggiunto il try/finally per ripristinare la funzione di sistema originale come suggerito da Dave Kirby
Questo non è più untest test, ma test di integrazione. Perché hai bisogno di lanciare vim? Di solito, "prendi in giro" questo, simula la generazione del processo e dipende dal fatto che il modulo di subprocesso di Python sia ben testato.
Per eseguire questa operazione nel codice, è possibile, ad esempio, sottoclasse la classe che implementa la funzionalità e sovrascrive il metodo responsabile della generazione. Quindi prova questa sottoclasse. Cioè
class VimSpawner(object): # your actual code, to be tested
...
def spawn(self):
... do subprocess magic
def other_logic(self):
...
self.spawn()
class TestableVimSpawner(VimSpawner):
def spawn(self):
... mock the spawning
self.ididit = True
class Test(..):
def test_spawning(self):
t = TestableVimSpawner()
t.other_logic()
self.failUnless(t.ididit)
Che 'iditit' ? – GiantsLoveDeathMetal
È un refuso :-) –
Ancora non sei sicuro di cosa si tratti? – GiantsLoveDeathMetal
- 1. Unit Testing Interfaces in Python
- 2. Unit Testing Ember Servizi che prelevano dati
- 3. Unit Testing MVC Controllers
- 4. Unit Testing Shiny Apps
- 5. Unit Testing pattern
- 6. Unit Testing iPhone Codice che utilizza NSLocalizedString
- 7. Unit Testing costruttore iniezione
- 8. Unit Testing e PostSharp
- 9. Unit Testing Embedded Software
- 10. PHP Unit testing
- 11. Unit Testing XQuery
- 12. Unit Testing EJB
- 13. Unit Testing ViewController's Lifecycle
- 14. SingleResult e unit testing
- 15. Unit testing con un file di input
- 16. Test Driven Development, Unit Testing
- 17. AngularJS unit testing con ReSharper
- 18. ASP.NET MVC Unit Testing - Sessioni
- 19. Problema Unit Testing in VB.NET
- 20. Unit-testing and boost :: asio
- 21. Moq + Unit Testing: System.Reflection.TargetParameterCountException: Parameter count mismatch
- 22. annotazione, che invoca un metodo
- 23. Django unit testing per modulo di modifica
- 24. C++ e Dependency Injection in unit testing
- 25. nodo js Unit Testing: beffardo richiede dipendenza
- 26. DotNetNuke Unit Testing Facilities and Tutorials
- 27. Unit Testing con NSURLSession per OCMock
- 28. Unit testing di RenderMvcController anche possibile?
- 29. Unit Testing ViewResult in Asp.NET MVC
- 30. Unit testing di un'applicazione python che utilizza la libreria delle richieste
Se si esegue questa operazione assicurarsi di avvolgere la chiamata in una prova: infine: blocco o utilizzare l'installazione e tearDown di ripristinare l'originale os.system dopo. Altrimenti, alla fine, si scriverà un test in una parte non correlata della propria suite di test che tenta di chiamare il sistema os reale e di grattarsi la testa chiedendosi perché non funziona. –
Il patch delle scimmie in questo modo è piuttosto complicato. Se il code-to-be-mocked si è impossessato di un riferimento a os.system prima di correggerlo, il patching non avrà l'effetto desiderato. Inoltre, questo è esattamente ciò che la (ormai incorporato) pacchetto finta fa, in modo da utilizzare al posto che :) Ma la mia soluzione qui di seguito descrive un modo per testare il codice senza la necessità di alcuna patch a tutti –