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

嘲笑私有方法

叶元凯
2023-03-14
class TestLoad {
    private static List <String> myList = new ArrayList <String> ();
    private static final String filename = "/myfile.txt";

    public XYZ generateList(Abc abc) throws Exception {
        populateList();
    }

    private populateList() {
        ClassLoader classLoader = TestLoad.class.getClassLoader();
        File listfile = new File(classLoader.getResource(
        filename).getFile());
        List <String> localList = new ArrayList <String> ();

        try (Scanner scanner = new Scanner(listfile)) {
            while (scanner.hasNextLine()) {
                String text = scanner.nextLine();
                localList.add(text.trim());
            }
            scanner.close();
        } catch (IOException e) {}
        return localList;
    }
}

以下是日志供参考:

IllegalStateException:无法转换名为com.xyz.TestLoad的类。原因:java.io.ioException:无效常量类型:在org.powermock.core.classloader.mockClassLoader.loadModifiedClass(MockClassLoader.java:180)在org.powermock.core.classloader.mockClassLoader.java:68)在java.lang.ClassLoader.loadClass(deferSupportingClassLoader.java:357)在java.lang.Class.forName(class.java:348)在java.lang.Class.ForName0 it4.common.internal.impl.junit4TestSuiteChunkerImpl.createDelegatorfromClassLoader(junit4TestSuiteChunkerImpl.java:145)在org.powermock.modules.JUnit4.common.internal.impl.junit4TestSuiteChunkerImpl.jreateDelegatorfromClassLoader(junit4TestSuiteChunkerImpl.java:40)在IMPL.(JUnit4TestSuiteChunkerImpl.java:61)在org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.(AbstractCommonPowerMockRunner.java:32),org.powermock.modules.junit4.PowerMockRunner.(powerMockRunner.java:34),sun.reflect.nativeConstructorAccessorImpl.NewInstance0(本机方法)

共有1个答案

华心思
2023-03-14

您的测试代码看起来像是在使用PowerMock EasyMock。但是你的帖子也有mockito和PowerMockito的标签。

我用PowerMockito给出下面的解决方案

主Java类:

public class TestLoad {

private static List<String> myList = new ArrayList<String>();
private static final String filename = "/myfile.txt";

public List<String> generateList(Abc abc) throws Exception {

    System.out.println("generateList method is called");
    return populateList();
}

private List<String> populateList() {
    System.out.println("populateList method is called");
    ClassLoader classLoader = TestLoad.class.getClassLoader();
    File listfile = new File(classLoader.getResource(filename).getFile());
    // Read listfile and build localList logic here
    List<String> localList = new ArrayList<String>();

    return localList;
 }
}
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@PrepareForTest(TestLoad.class)
@RunWith(PowerMockRunner.class)
public class TestLoadTest {

@Test
public void testPrivateMethod() throws Exception{

    List<String> testList = new ArrayList<String>();
    testList.add("00");

    TestLoad mockInstance = PowerMockito.spy(new TestLoad());

    PowerMockito.doReturn(testList).when(mockInstance, "populateList");

    List<String> outputList = mockInstance.generateList(new Abc());

    System.out.println("test output:" + outputList);

    PowerMockito.verifyPrivate(mockInstance, Mockito.times(1)).invoke("populateList"); 

}

}
generateList method is called
test output:[00]
 类似资料:
  • 运行jUnit时的异常 我想测试这个类,下面是测试方法 运行junit会产生以下异常

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 我是Mockito的新手,正在尝试模拟服务方法。但是,Mockito无法正确模拟函数。 以下是部分测试代码: 课程: 我期待返回一个非空列表。但是,它返回了一个空列表。有人能帮忙吗?

  • 我有一个Spring MVC应用程序。它有控制器、服务和Dao。我只想通过使用Mockito模拟DAO层来测试控制器和服务。 我的控制器类: 我的服务类: 我的测试类: 问题:通过自动连线控制器和服务,它可以很好地执行通话。然而,从服务中,DAO调用的是一个真正的DAO,而不是模拟的DAO。 > 在控制器中保留道并对控制器使用@InjectMock可以正常工作,但是我想在服务中保留道,并且只测试控

  • 当我试图模仿javax.ws.rs.core 时,我得到一条错误消息: 无法创建JAX-RS运行时委托 为什么会发生这种情况? 但是,当我试图嘲笑HttpServlet响应时,这是没有问题的!

  • 问题内容: 我在带有打字稿的React Router v5.1.2中使用UseHistory挂钩吗?运行单元测试时,我遇到了问题。 TypeError:无法读取未定义的属性“ history”。 我也尝试使用,但仍然无法正常工作。 问题答案: 浅化使用的反应功能组件时,我需要相同的内容。 在我的测试文件中解决了以下模拟问题: