Я пытаюсь написать модульный тест для статического метода, который содержит операции с файлами. Я использую junit и PowerMockito. Метод для тестирования - преобразование файла csv в список bean. Поскольку это модульный тест, я издеваюсь над вызовом метода, который находится внутри нашего метода. Но следующая ошибка происходя,Операции Mocking file в модульном тесте с использованием junit и PowerMockito не работают
org.mockito.exceptions.misusing.MissingMethodInvocationException: когда() требует аргумент, который должен быть «вызов метода на макете. Например: когда (mock.getArticles()). ThenReturn (articles);
Кроме того, эта ошибка может возникнуть из-за того, что: 1. Вы заглушите любой из следующих методов: final/private/equals()/hashCode(). Эти методы не могут быть подвергнуты реставрации/проверке. Способы разметки, объявленные для классов, не принадлежащих родителям, не поддерживаются. 2. внутри, когда() вы не вызываете метод на макет, но на какой-то другой объект.
в com.mypackage..unittest.UTCSVBeanUtil.convert_convertingCsvToBean (UTCSVBeanUtil.java:54) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) в sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) в java.lang.reflect.Method.invoke (Unknown Source) в org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:47)
Мой класс,
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;
import au.com.bytecode.opencsv.bean.ColumnPositionMappingStrategy;
import au.com.bytecode.opencsv.bean.CsvToBean;
public class CSVBeanUtil {
public static <T> List<T> fileToBean(final String filename, final char delimiter, final Class<T> beanClass,
final String[] columns) throws FileNotFoundException {
BufferedReader reader = new BufferedReader(new FileReader(filename));
try {
return bufferReaderToBean(reader, delimiter, beanClass, columns);
} finally {
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
// ignore
}
}
}
}
public static <T> List<T> stringToBean() {
return null;
}
public static <T> List<T> bufferReaderToBean(BufferedReader reader, final char delimiter, final Class<T> beanClass,
final String[] columns) {
CSVReader csvreader = null;
final CsvToBean<T> csv = new CsvToBean<T>();
csvreader = new CSVReader(reader, delimiter);
ColumnPositionMappingStrategy<T> strategy = new ColumnPositionMappingStrategy<T>();
strategy.setType(beanClass);
strategy.setColumnMapping(columns);
return csv.parse(strategy, csvreader);
}
public static boolean writeToCsv(List<String[]> beanList, Path absPath) throws IOException {
CSVWriter writer = new CSVWriter(new FileWriter(absPath.toAbsolutePath().toString()),
CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
writer.writeAll(beanList);
writer.close();
return false;
}
}
И мой тестовый класс,
import static org.junit.Assert.assertEquals;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import com.mypackage..config.AppConfig;
import com.mypackage..entity.MyFile;
import com.mypackage..service.MyFileValidation;
import com.mypackage..utility.CSVBeanUtil;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@WebAppConfiguration
@ContextConfiguration(classes = { AppConfig.class })
@PrepareForTest(CSVBeanUtil.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class UTCSVBeanUtil {
List<MyFile> dataList = new ArrayList<MyFile>();
List<MyFile> expectedList=new ArrayList<MyFile>();
@Before
public void beforeClass() {
expectedList = getdataList();
}
@Test
public void convert_convertingCsvToBean()
throws IOException{
PowerMockito.mockStatic(CSVBeanUtil.class);
// BufferedReader bufferedReader = Mockito.mock(BufferedReader.class); // while using this the test execution doesn't terminate
BufferedReader bufferedReader= new BufferedReader(new StringReader("201030"));
// File file = Mockito.mock(File.class);
Mockito.when(CSVBeanUtil.bufferReaderToBean(bufferedReader, ',', MyFile.class, MyFile.columns))
.thenReturn(expectedList);
dataList.addAll(CSVBeanUtil.fileToBean(null, ',', MyFile.class, MyFile.columns));
assertEquals(expectedList,dataList);
}
private List<MyFile> getdataList() {
List<MyFile> expectedList=new ArrayList<MyFile>();
MyFile gv=new MyFile();
gv.setTRADENUM("201030");
expectedList.add(gv);
return expectedList;
}
}
Я пытаюсь решить эту проблему. Пожалуйста, помогите мне ... Спасибо
Если я правильно понял, первый параметр - это имя файла, вы можете поместить файлы в папку ресурсов и получить доступ, например, «src/test/resources/filname.csv» –
Спасибо ... Но без какого-либо временного файла, я не могу этого сделать. не так ли? – Guna
Вам нужен физический файл для тестирования –