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

使用参数构造函数模拟在运行时获取“ExceptionInInitializeError”

卢俊发
2023-03-14

我正在使用Junit4测试外部java类。我想模拟下面的代码行

MySearch mySearch = MyCache.getData(new MyAlgorithm(keyword.trim()), MySearch.class);

我试过这样

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyCache.class, MyAlgorithm.class})
public class Test {

@BeforeClass
  public static void setUpBeforeClass() throws Exception {

    PowerMockito.mockStatic(MyCache.class);

    MyAlgorithm alg = Mockito.mock(MyAlgorithm.class);
    PowerMockito.whenNew(MyAlgorithm.class).withArguments("ABC").thenReturn(alg);

    MySearch mySearch = Mockito.mock(MySearch.class);
    PowerMockito.when(MyCache.getData(alg,MySearch.class)).thenReturn(mySearch);

    //...
  }
  
}

但我仍然收到了这个错误“java.lang.ExceptionInInitializeError”

Java语言lang.ExceptionInInitializerRor在sun。反映GeneratedSerializationConstructorAccessor6。java上的newInstance(未知源)。lang.reflect。构造函数。org上的newInstance(Constructor.java:423)。objenesis。实例化器。太阳太阳反射系数安装器。org上的newInstance(sunReflectionFactoryInstallator.java:45)。objenesis。ObjenesisBase。org上的newInstance(ObjenesisBase.java:73)。莫基托。内部的创造例子OBJENESINSINTIATOR。org上的newInstance(ObjenesisInstantiator.java:14)。powermock。api。莫基托。重新包装。分类器。在org上创建代理(ClassImposterizer.java:143)。powermock。api。莫基托。重新包装。分类器。org上的importise(ClassImposterizer.java:58)。powermock。api。莫基托。内部的模拟创建。MockCreator。org上的createMethodInvocationControl(MockCreator.java:111)。powermock。api。莫基托。内部的模拟创建。MockCreator。org上的mock(MockCreator.java:59)。powermock。api。莫基托。PowerMockito。sun上的mockStatic(PowerMockito.java:70)。反映NativeMethodAccessorImpl。在sun调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。lang.reflect。方法在org调用(Method.java:498)。朱尼特。内部的跑步者。ClassRoadie。runBefores(ClassRoadie.java:57)位于org。朱尼特。内部的跑步者。ClassRoadie。org上的runProtected(ClassRoadie.java:44)。powermock。模块。junit4.internal。实施。PowerMockJUnit44RunnerDelegateImpl。在org上运行(PowerMockJUnit44RunnerDelegateImpl.java:122)。powermock。模块。junit4.common。内部的实施。JUnit4TestSuiteChunkerImpl。在org上运行(JUnit4TestSuiteChunkerImpl.java:106)。powermock。模块。junit4.common。内部的实施。AbstractCommonPowerMockRunner。在org上运行(AbstractCommonPowerMockRunner.java:53)。powermock。模块。junit4.PowerMockRunner。在org上运行(PowerMockRunner.java:59)。日食jdt。内部的junit4.runner。JUnit4TestReference。在org上运行(JUnit4TestReference.java:93)。日食jdt。内部的朱尼特。跑步者测试执行。在org上运行(TestExecution.java:40)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行测试(RemoteTestRunner.java:529)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行测试(RemoteTestRunner.java:756)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行(RemoteTestRunner.java:452)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。main(RemoteTestRunner.java:210)

共有1个答案

南门鸿畴
2023-03-14

确保您至少有一种测试方法。类似于:

@org.junit.Test
public void testMethod() {
}
 类似资料:
  • 问题内容: 我的课如下: 在构造函数中的逻辑和是我试图嘲弄的事情。我想要任何调用:返回一个虚拟字符串。 我试过了: 但这似乎不起作用。仍在执行构造函数逻辑,而不是获取的模拟对象。 问题答案: 您发布的代码适用于最新版本的Mockito和Powermockito。也许您还没有准备A?试试这个: A.java MockA.java 两项测试均应通过Mockito 1.9.0,powermockito

  • 考虑下面给出的代码: 我正在尝试编写一个单元测试用例: < li >调用< code >对象b。B()必须被嘲笑 < li >必须模拟对构造函数的调用 这就是我使用Mockito和Powermockito所做的: 第一个模拟成功工作,但第二个模拟使用 失败,并出现以下错误: org.powermock.reflect.exceptions.ConstructorNotFoundException:

  • 我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?

  • 问题内容: 我想将构造函数模拟为方法。 在我的测试中,我想做这样的事情: 但是给我这个 错误 知道为什么吗? 问题答案: 您可以使用PowerMock模拟构造函数。 如果由于某种原因而无法使用PowerMock,则最可行的解决方案是将工厂注入到包含此方法的任何类中。然后,您将使用工厂创建对象并模拟工厂。

  • 问题内容: 我正在尝试第一次使用PowerMockito模拟类构造函数,但是它不起作用。我当前的代码是: 测试失败,因为返回的值为“ Fail”。我的问题在哪里? 问题答案: Okey,找到答案了,您需要致电 代替

  • 我有一个带有私有构造函数的单例类,我想为此编写单元测试。 如何使用mockito框架模拟具有私有构造函数的类。 谢谢