Wie mock-statische Methode in Java?
Habe ich eine Klasse FileGenerator
, und ich Schreibe einen test für die generateFile()
Methode, die tun sollten, die folgende:
1) es sollten rufen Sie die statische Methode getBlockImpl(FileTypeEnum)
auf BlockAbstractFactory
2) es sollte aufzufüllen variable blockList
von der Unterklasse Methode getBlocks()
3) sollte es eine statische Methode createFile
von einer finalen Helfer-Klasse FileHelper
übergabe einer String-parameter
4) sollte es die run-Methode jeder BlockController
in die blockList
So weit, ich habe diese leere Methode:
public class FileGenerator {
//private fields with Getters and Setters
public void generateBlocks() {
}
}
Ich bin mit JUnit, Mockito, um mock-Objekte, und ich habe versucht, mit PowerMockito zu verspotten, static und final Klassen (die Mockito nicht tun).
Mein problem ist: mein Erster test (aufrufende Methode getBlockList()
aus BlockAbstractFactory
) vorbei ist, obwohl es keine Umsetzung in generateBlocks()
. Ich habe implementiert die statische Methode in BlockAbstractFactory
(null zurückgeben, so weit), um zu vermeiden Eclipse-syntax-Fehler.
Wie kann ich testen, ob die statische Methode aufgerufen wird fileGerator.generateBlocks()
?
Hier ist meine Test-Klasse, bisher:
@RunWith(PowerMockRunner.class)
public class testFileGenerator {
FileGenerator fileGenerator = new FileGenerator();
@Test
public void shouldCallGetBlockList() {
fileGenerator.setFileType(FileTypeEnum.SPED_FISCAL);
fileGenerator.generateBlocks();
PowerMockito.mockStatic(BlockAbstractFactory.class);
PowerMockito.verifyStatic();
BlockAbstractFactory.getBlockImpl(fileGenerator.getFileType());
}
}
- abstrakte Methoden können nicht statisch sein
- Die einfachste Antwort ist, wenn Sie sich entschieden haben, zu tun, TDD, kick die Gewohnheit des Schreibens statische Methoden 🙂
- es ist eine statische Methode aus einer Abstrakten Klasse keine abstrakten statischen Methode. EDIT: sah gerade den Fehler in meiner Frage. Behoben.
- naja, wenn es wirklich keinen anderen Weg, ich werde es ändern...
- Nicht eine Antwort auf deine Frage, nur ein Tipp: die Instantiierung der
FileGenerator fileGenerator = new FileGenerator();
im test-Methode oder der @Vor, nicht als Mitglied der test-Klasse. Mit Ihrem aktuellen Implementierung teilen Sie instanziiertfileGenerator
über die tests in der test-Klasse (vorausgesetzt, Sie wollen auch unabhängige tests) - vielen Dank für die Beratung!
- kannst du die statische Methode in
BlockAbstractFactory
möchten Sie verspottet haben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich keine Erfahrung mit PowerMock, aber da Sie nicht bekommen, eine Antwort aber ich bin gerade mit dem Lesen durch die Dokumentation, um zu sehen, wenn ich Ihnen helfen kann, ein bisschen auf dem Weg.
Fand ich, dass Sie sich vorbereiten müssen, PowerMock, so dass ich weiß, welche statische Methoden, die es braucht, um sich darauf vorzubereiten verspottet. Etwa so:
Hier Sie weitere Informationen finden können.
Hilft das?
@RunWith(PowerMockRunner.class) @PrepareForTest(BlockAbstractFactory.class) public class testFileGenerator extends TestCase { // same code, with your @Before and @After suggestion }
Beispiel: