um eine der privaten Methode, die ich codiert, zu testen, muss ich ein Singleton verspotten.Mocking Singleton mit PowerMockito
Nach der Prüfung mehrerer Methoden mit PowerMockito:
PowerMockito.mockStatic(UtilDatabaseSoldeAutoCdeCommon.class);
Mockito.when(UtilDatabaseSoldeAutoCdeCommon.getInstance()).thenReturn(mockDatabase);
ich nie diese Klasse verspotten konnte. So kann ich meine Methoden nicht testen, da ich in jedem von ihnen auf die Datenbank zugreife.
UtilDatabaseSoldeAutoCdeCommon wird als solche definiert:
public class UtilDatabaseSoldeAutoCdeCommon extends AbstractUtilDatabase {
private static UtilDatabaseSoldeAutoCdeCommon instance;
private UtilDatabaseSoldeAutoCdeCommon() {
super();
}
public static UtilDatabaseSoldeAutoCdeCommon getInstance() {
if(instance == null) {
instance = new UtilDatabaseSoldeAutoCdeCommon();
}
return instance;
}
...
}
I powermockito debuggt, wenn es getInstance(), aber jedes Mal consructor heißt ruft, es stürzt ab, da sie Konfigurationsdatei zu laden versucht (was nicht existiert).
Ich präzis, dass Konfigurationsdatei als eine Konstante in Absract Elternklasse von UtilDatabaseEnrichissement definiert und im Konstruktor verwendet wird.
Wie könnte ich diesen Teil testen?
Vielleicht überdenken Sie Ihre Entscheidung, einen Singleton zu benutzen? –
Ich habe nicht wirklich die Wahl dafür ... Meine Arbeit ist nur eine kleine Evolution im Programm und ich kann diesen Teil nicht ändern, da er von vielen anderen Modulen verwendet wird. Vielleicht ist es unmöglich, es zu verspotten, wenn ein Objekt installiert ist, versucht es die Konfigurationsdatei zu öffnen. Also wäre die Lösung, ein Objekt zu erstellen, ohne es zu instanziieren, was unmöglich ist, was ich weiß ... – Biologeek