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 instanziiert fileGenerator ü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?

InformationsquelleAutor Tarek | 2013-03-15
Schreibe einen Kommentar