Пожалуйста, со мной, как я новичок в мире TDD.TDD: как издеваться над статическим методом в Java?
У меня есть класс FileGenerator
, и я пишу тест на generateFile()
метод, который необходимо сделать следующее:
1) он должен вызвать статический метод getBlockImpl(FileTypeEnum)
на BlockAbstractFactory
2) он должен заполнить переменную blockList
из метода подкласса getBlocks()
3) он должен вызвать статический метод createFile
от конечного вспомогательного класса FileHelper
передавая параметр типа String
4) он должен вызвать метод выполнения каждого BlockController
в Blocklist
До сих пор, у меня есть этот пустой метод:
public class FileGenerator {
// private fields with Getters and Setters
public void generateBlocks() {
}
}
Я использую JUnit, Mockito издеваться объектов и я вы пытались использовать PowerMockito, чтобы издеваться над статическими и конечными классами (которые Mockito не делает).
Моя проблема: мой первый тест (вызов метода getBlockList()
от BlockAbstractFactory
) проходит, хотя в generateBlocks()
нет реализации. Я применил статический метод в BlockAbstractFactory
(возвращая значение null, пока), чтобы избежать синтаксических ошибок Eclipse.
Как проверить, вызван ли статический метод в пределах fileGerator.generateBlocks()
?
Вот мой тест класса, до сих пор:
@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());
}
}
абстрактные методы не могут быть статичными – ArtB
Самый простой ответ, если вы решили сделать TDD, пнуть привычку писать статические методы :) – Affe
@ArtB это статический метод из Абстрактный класс, а не абстрактный статический метод. EDIT: просто увидел ошибку в моем вопросе. Исправлена. – Tarek