2016-05-26 28 views
5

Usare Python 2.6.6Come smontare Python Lock viene acquisito con l'istruzione 'with'?

Così ho appena appreso che il seguente:

myLock.acquire() 
doStuff() 
myLock.release() 

può essere sostituito con:

with myLock: 
    doStuff() 

mio quandry è che con l'ex codice che ho potuto unittest che il lucchetto veniva usato per proteggere il fare-di-roba prendendo in giro la serratura. Ma con quest'ultimo il mio non più valido ora (in modo prevedibile) fallisce, perché non vengono chiamati acquire() e release(). Quindi, per il secondo caso, come posso verificare che il lucchetto sia usato per proteggere il fare-di-cose?

Preferisco il secondo metodo perché non è solo più conciso, ma non c'è alcuna possibilità che scriverò codice che dimentica di sbloccare una risorsa. (Non che l'abbia mai fatto prima ...)

risposta

6

L'istruzione with chiama internamente i metodi magici __enter__ e __exit__ all'inizio e alla fine (rispettivamente). È possibile prendere in giro questi metodi utilizzando MagicMock o impostando esplicitamente .

L'impostazione dei metodi magici in questo modo funziona solo per i mock; per sovrascrivere un metodo magico su un oggetto non fittizio, devi impostarlo sul tipo.