Я пытаюсь издеваться над классом с JMockit 1.45.
Поскольку метод Deencapsulation.setField
удален, я не могу установить значение частного поля. Поэтому я ищу способ установить значение частного поля во время инициализации класса. Я добавил дополнительный конструктор для установки значения частного поля. Но я не могу найти способ получить правильно установленный экземпляр с аннотацией @Tested
с конкретным Конструктором. Есть ли другой способ сделать это?
"long maxSizeByte" должен быть установлен Конфигурацией, и мне нужно проверить, работает ли метод с различными значениями.
Образец кода Класс производства
public class MagazineFetcher {
@EJB private StatisticDAO statisticDao;
// configs
private long maxSizeByte;
public MagazineFetcher() {
this(ProjectConfig.getCdsMaxChannelSizeByte());
}
// This constructor is adde for a testcase to set the private value
public MagazineFetcher(long maxSizeByte) {
this.maxSizeByte = maxSizeByte;
}
// using maxSizeByte field for a calcuation and validation
public void doSomething(){
}
}
Контрольный пример
public class MagazineFetcherTest {
@Injectable private StatisticDAO statisticDao;
@Tested private MagazineFetcher magazineFetcher ;
@Test
public void testInvalidImportFile() throws Exception {
magazineFetcher.doSomething();
}
}
Кажется, @Tested private MagazineFetcher magazineFetcher
создается только конструктором по умолчанию. Я ищу способ, инициированный другим конструктором. Когда я просто MagazineFetcher magazineFetcher = new MagazineFetcher(100 * 1024)
, я получаю экземпляр, который statisticDao
не вводится.