【问题标题】:Cannot subclass final class class with powermock无法使用 powermock 子类化最终类类
【发布时间】:2017-04-27 22:23:02
【问题描述】:

我有一个“final”类,我需要在其中测试私有方法, 尝试以下方式获取失败案例(异常)但得到错误

[junit] 原因:IllegalArgumentException:无法子类化 最后一堂课

如何解决这个错误,请任何人提出建议

//final class
public final Class Test {

  //private constructor
  private Test(Events event) {
     //initialization
  }

  private JSONObject getReg() {
    return new JSONObject;
  }

  private State Updation(String macAddr) {
    try {
      return update(getReg(), PATH, macAddr);
    } catch (Exception e) {
      throw new JSONException(e);
    } 
  }

 }


 @PrepareForTest({Test.class})
 @RunWith(PowerMockRunner.class)
 public class TestClassTest {

 @Test(expected = Exception.class)
 public void UpdationInvalidTest() throws Exception {
   JSONObject jsonObj = new JSONObject();

   Test test = Whitebox.invokeConstructor(Test.class, event);

   Test testSpy = PowerMockito.spy(test);
   PowerMockito.doReturn(jsonObj).when(testSpy, "getReg");

   Whitebox.invokeMethod(test, "Updation", "00:00:00:00:00:00");
 }
}

【问题讨论】:

  • 哇是WhiteboxPowerMockito你能展示这两个类吗。这两个类不能扩展RebootDevice
  • 您在哪一行得到异常?您似乎在做正确的事情 (see this question)。
  • 在这一行我得到类似“[junit] Caused by: java.lang.IllegalArgumentException: Cannot subclass final class”RebootDevice rebootDeviceSpy = PowerMockito.spy(rebootDevice);
  • 你在哪里初始化event变量?

标签: java junit mockito powermock powermockito


【解决方案1】:

正如@Ivan 所说,您应该模拟最后一堂课。你可以这样做:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Test.class)
public class TestClassTest {   

    @Mock
    private Test test;

    @Test(expected = Exception.class)
    public void UpdationInvalidTest() throws Exception {
       JSONObject jsonObj = new JSONObject().put("status", 123)
                                            .put("update-time", 123);

       Mockito.when(test.getReg()).thenReturn(jsonObj);

    }
}

【讨论】:

    【解决方案2】:

    尝试在 final 类上创建 spy 时遇到错误。您应该使用另一种方法来完成此操作 - 使用此处描述的模拟:https://github.com/powermock/powermock/wiki/MockFinal:

    【讨论】:

    • 我做了一个快速的本地测试,最终类的间谍的创建实际上对我有用。
    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 2016-07-16
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多