devo una classe base astratta lungo le linee di:Esclusione abstractproperties da copertura riporta
class MyAbstractClass(object):
__metaclass__ = ABCMeta
@abstractproperty
def myproperty(self): pass
Ma quando corro nosetests (che la copertura) sul mio progetto, si lamenta che la linea di proprietà def è testato. Non può realtà da testare (per quanto ne so) come istanza della classe astratta si tradurrà in un'eccezione di essere sollevato ..
ci sono delle soluzioni a questo, o devo semplicemente accettare la copertura dei test < 100% ?
Ovviamente, è possibile rimuovere l'utilizzo di ABCMeta
e semplicemente aumentare la classe di base NotImpementedError
, ma preferisco il metodo precedente.
Alla fine ho scoperto "#pragma: no cover" su IRC e sono andato con quello in linea. Non sono un fan di avere un'implementazione in una proprietà astratta (anche se è solo "sollevare NotImplementedError" in quanto sembra sconfiggere lo scopo). –
wait: stai bene inserendo un commento "#pragma: no cover" su ogni proprietà astratta, ma non sei d'accordo nel cambiare il corpo da pass a "raise NotImplementedError"? A ciascuno il suo, immagino ... Felice che tu abbia trovato una soluzione che ti piace. –
Sono assolutamente d'accordo che non è una soluzione ottimale, ma preferisco usare le direttive inline come quella di alterare l'uso e il beneficio del modulo di classe base astratto. –