当前位置: 首页 > 知识库问答 >
问题:

使用junit和PowerMockito在单元测试中模拟文件操作不起作用

赵光赫
2023-03-14
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个答案

訾淇
2023-03-14

PowerMock提供了它自己的runner,用@runwith注释指定

@RunWith( PowerMockRunner.class)

如果要使用SpringJunit4ClassRunner.class

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

使用另一个带有PowerMock的JUnit运行程序

 类似资料:
  • 问题内容: 我正在尝试在python单元测试中模拟常量。 我有一个名为 settings.py 的模块,其中包含一组常量,特别是我有一个: 然后在另一个模块中,我有一个使用REL_PATH变量的函数,如下所示: 在我的单元测试中,我有以下代码: 我希望通过这种方式将在“另一个/自定义/路径/”路径下创建csv文件,但仍在原始目录中创建csv文件。 我也试图这样做: 但最终结果是相同的。 我究竟做错

  • 我有以下测试代码:

  • 问题内容: 我已经通过两种方式为我的单元测试创​​建了用户: 1)为“ auth.user”创建一个大致如下的灯具: 我省去了看似不重要的部分。 2)在setUp函数中使用“ create_user”(尽管我宁愿将所有内容保留在我的Fixture类中): 请注意,两种情况下的密码均为辛普森。 我已验证该信息一次又一次正确地加载到测试数据库中。我可以使用User.objects.get来获取User

  • 并添加注释 我得到一条消息:没有测试找到test runner JUnit5,并且在Problems选项卡中有SpringBootTest.jar无法读取或者不是有效的ZIP文件 也试过 我也试过: 如果我将字符串myUrl硬编码为“http://localhost:8090”,则测试工作正常,因此问题在于@value不工作

  • 我对SonarRunner有以下问题。 SonarQube 以及 Sonar 运行器无法拉取 junit 格式的 xml 报告 “单元测试”或“测试覆盖率”小组件不显示。它说没有数据。我正在按照此处描述的说明进行操作 我按照描述手动创建了XML格式的报告文件,但是仍然没有成功。 下面是 XML 文件 - TEST-Firefox_210_Mac_OS.com.company.BarTest.xml

  • 我正在尝试使用intellij idea运行单个spock单元测试。 考虑: 在上面的测试中,当我转到测试主体和右上下文菜单时,我得到了两种类型的测试。一个是grails测试,另一个是junit测试。 关于这个问题,公认的答案建议使用jUnit运行程序。但是使用它,代码根本无法编译(可能是因为某些插件和其他类不可用)。 (我不确定,因为这是期望的行为,因为我只是运行一个测试,而不是所有的测试。所以