Se scegli come target più SO, probabilmente dovrai testare il tuo programma su ognuno di essi. Questi test dovrebbero in genere includere l'esecuzione della suite di test sul sistema operativo desiderato. Quindi la soluzione semplice per testare il metodo sopra descritto è di adattare il risultato previsto su platform.system()
esattamente nello stesso modo mostrato sopra:
def testUpdateString():
var expectedResult=""
if platform.system() == 'Darwin':
expectedResult="http://download.com/to/OSX/version"
elif platform.system() == 'Linux':
expectedResult="http://download.com/to/Linux/version"
elif platform.system() == 'Windows':
expectedResult="http://download.com/to/Windows/version"
else:
expectedResult="Seek advice on how to update."
assertEqual(expectedResult,updateString())
Naturalmente, lo svantaggio è che non è possibile ottenere una copertura completa del test del codice quando si eseguono i test su un solo sistema operativo. In questo esempio, questo è probabilmente accettabile, ma se i metodi "reali" che vuoi testare sono più complicati, potrebbe diventare più pratico testare le diverse parti senza realmente cambiare il sistema operativo. In questo caso, rifatta la parte principale in un metodo separato che ottiene platform.system()
come parametro:
def updateStringPerSystem(opSys):
if opSys == 'Darwin':
return "http://download.com/to/OSX/version"
elif opSys == 'Linux':
return "http://download.com/to/Linux/version"
elif opSys == 'Windows':
return "http://download.com/to/Windows/version"
else:
return "Seek advice on how to update."
def updateString():
return updateStringPerSystem(platform.system())
Ora puoi scrivere unit test per updateStringPerSystem
, passando tutte le stringhe di OS che ti piacciono per test diversi, permettendo di testare i diversi rami per OS1, OS2, OS3, ecc. anche quando stai usando la tua suite di test solo su OS1 .
Si noti che questo funziona solo per i test unitari di base. Non appena si desidera testare una funzione che in realtà utilizza il valore di ritorno per updateString
in modo dipendente dal sistema operativo, non è possibile prevedere di testare la funzionalità di Windows quando si esegue la suite su Linux o viceversa.