Non prendere in giro, ma introdurre un metodo che è possibile prendere in giro per ottenere le date. Qualcosa di simile a questo:
interface Utility {
Date getDate();
}
Utilities implements Utility {
public Date getDate() {
return Calendar.getInstance().getTime();
}
}
Poi si può iniettare questo nella vostra classe o semplicemente usare una classe di supporto con un mazzo di metodi statici, con un metodo di carico per l'interfaccia:
public class AppUtil {
private static Utility util = new Utilities();
public static void load(Utility newUtil) {
this.util = newUtil;
}
public static Date getDate() {
return util.getDate();
}
}
Poi nell'applicazione codice:
private void doSomething() {
Date today = AppUtil.getDate();
....
}
È quindi possibile caricare un'interfaccia fittizia nei metodi di test.
@Test
public void shouldDoSomethingUseful() {
Utility mockUtility = // .. create mock here
AppUtil.load(mockUtility);
// .. set up your expectations
// exercise the functionality
classUnderTest.doSomethingViaAPI();
// ... maybe assert something
}
Vedi anche Should you only mock types you own? e Test smell - everything is mocked
Quella linea non potrebbe essere la compilazione! – adarshr
È 'today' un membro della classe (campo) o una variabile locale all'interno di un metodo? –
variabile locale all'interno di un metodo – Randomize