2015-11-18 5 views
1

Я пытаюсь написать модульный тест для статического метода, который содержит операции с файлами. Я использую 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; 
} 

}

Я пытаюсь решить эту проблему. Пожалуйста, помогите мне ... Спасибо

ответ

1

PowerMock обеспечивает его собственный бегун, указанный с @RunWith аннотацию

@RunWith(PowerMockRunner.class) 

Если вы хотите использовать SpringJUnit4ClassRunner.class

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) 

Using another JUnit Runner with PowerMock

+0

Если я правильно понял, первый параметр - это имя файла, вы можете поместить файлы в папку ресурсов и получить доступ, например, «src/test/resources/filname.csv» –

+0

Спасибо ... Но без какого-либо временного файла, я не могу этого сделать. не так ли? – Guna

+0

Вам нужен физический файл для тестирования –

Смежные вопросы