Questa domanda sorge durante il tentativo di scrivere casi di test. Foo è una classe all'interno della libreria di framework su cui non ho accesso all'origine.sovrascrive i metodi java final tramite riflessione o altri mezzi?
public class Foo{
public final Object getX(){
...
}
}
mie applicazioni sarà banco di prova
public class Bar extends Foo{
public int process(){
Object value = getX();
...
}
}
L'unità è in grado di inizializzare come non posso creare un oggetto Foo a causa di altre dipendenze. Il BarTest genera un puntatore nullo poiché il valore è null.
public class BarTest extends TestCase{
public testProcess(){
Bar bar = new Bar();
int result = bar.process();
...
}
}
C'è un modo per utilizzare la reflection api per impostare getX() su non finale? o come dovrei andare sui test?
Questo non è il test unitario. I test unitari sono per unità di codice estremamente granulari. Quello che descrivi sembra più simile a test di integrazione o test funzionali. –
Non necessariamente; Non conosco le circostanze specifiche in cui sta lavorando (ad esempio altre classi, DB, ecc.), Ma ci sono alcuni test che puoi fare con molte classi contemporaneamente - ad esempio, se stai usando una libreria esterna, è ok, supponiamo che stia funzionando bene e che usi tutti i suoi clases nei test. – Seb
Sì, ci sono "alcuni test che puoi fare con molte classi contemporaneamente". Quelli non sono test unitari. Ancora utile, e importante da fare, ma non sono ** test ** unità. –