Powermock с вызовом Arguments с переменным вводом - PullRequest
0 голосов
/ 04 июня 2018

У меня есть тест и тестируемый класс, который использует время в имени файла.

Тестовый код:

SimpleDateFormat simpleDateFormatTimestamp = new SimpleDateFormat("yyMMddHHmmss");

String outputpath= inboundDir+inboundFilePrefix+simpleDateFormatTimestamp.format(new Date())+".txt";
PowerMockito.whenNew(File.class).withArguments(outputpath).thenReturn(outputFileToInboundDir); 

Тестируемый класс Код:

File outputFile=new File(inboundDir+inboundFilePrefix+simpleDateFormatTimestamp.format(new Date())+".txt");

Также в тесте и в тестируемом классе у меня есть другие новые вызовы файлов, поэтому я не могу использовать насмешку с любыми аргументами.когда я использую withAnyArguments, для всех новых файловых вызовов возвращается только одна ложная копия.

Мой тестовый случай когда-нибудь проходит и не проходит в других случаях, в зависимости от теста и тестируемого класса, выполняемых в одну секунду ("yyMMddHHmmss") или нет.

Как удалить этот тест, если класс и тест выполняются в разные секунды.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Обходной путь, который работал для меня, как показано ниже.

Поскольку у меня был только один такой вызов в тесте, я удалил переменную часть simpleDateFormatTimestamp.format (new Date ()) + ". Txt"

Теперь, если я делаю ниже, все работает нормально.

String outputpath= inboundDir+inboundFilePrefix; PowerMockito.whenNew(File.class).withArguments(startsWith(outputpath)).thenReturn(outputFileToInboundDir);

Запускается с Matcher, доступным в org.mockito.Mockito

0 голосов
/ 05 июня 2018

Это одно из возможных решений.

String outputpath= inboundDir+inboundFilePrefix+simpleDateFormatTimestamp.format(new Date())+".txt";
PowerMockito.whenNew(File.class).withAnyArguments().thenAnswer(invocation -> {
    String firstArgument = (String) invocation.getArguments()[0];
    // do a pattern matching for firstArgument with a regex containing date in it. 
    // if its true then return outputpath
    // else return something else
});

Мы могли бы использовать ArgumentCaptor, но PowerMockito.whenNew не поддерживает это.

...