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

在最终(实用程序)类中模拟私有静态方法

林和畅
2023-03-14

有没有办法测试以下类,模拟私有方法getMessage()?

我尝试过jUnit Mockito PowerMock,但我找不到一种方法(无需修改源代码或进行反射更改)。

有什么想法吗?

public final class One {
    public static String met1() {
        return getMessage();
    }
    private static String getMessage() {
        return "ciao";
    }
    private One() {
        // Empty
    }
}

共有1个答案

朱修德
2023-03-14

PowerMockito将允许您模拟类的所有静态方法,但您需要确保您的met1方法仍然调用真实的方法:

@RunWith( PowerMockRunner.class )
@PrepareForTest( One.class )
public class OneTest
{
  @Test
  public void testOne()
  {
    PowerMockito.mockStatic( One.class );
    try
    {
      PowerMockito.when( One.met1() ).thenCallRealMethod();
      Method getMessage = PowerMockito.method( One.class, "getMessage" );
      PowerMockito.when( getMessage.invoke( null ) ).thenReturn( "test" );
    }
    catch ( Exception e )
    {
      e.printStackTrace();
    }
    assertEquals( "test", One.met1() );
  }
}
 类似资料:
  • } 当我做它将打印芒果,但它仍然在打印苹果。如果有人能帮助我只使用MOCKITO而不是PowerMock等。

  • 问题内容: 我想模拟下一行: 这里的问题是newBigQueryClient方法返回的Bulder类是最终的。这意味着我既不能使用嘲讽也不可以使用powermockito来模拟它(它返回这样的异常:不能对最终类进行子类化),但是我需要返回适合于模拟它的构建方法的东西。有什么想法怎么做? 问题答案: 改善代码并使其更具可测试性的建议: 首先,您不会像您给我们的示例那样模拟 声明 。您可以模拟 对象

  • 问题内容: 我刚刚开始模拟应用程序的不同层。我到了一个地步,我的一个模拟对象在调用最终类静态方法时返回NPE。有没有解决的办法? 例如 问题答案: 您必须同时使用PowerMock和Mockito。 我不明白您的代码段正在尝试做什么,但是以下代码段允许类的静态方法返回模拟的对象。也许这会为您指明正确的方向 在课堂上: 在您的测试方法中:

  • 问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。

  • 问题内容: 给定下面的Java代码,您可以在Ruby类中最接近地表示这两个变量吗?而且,在Ruby中是否可以像Java中那样区分和变量? 问题答案: Ruby中确实没有等效的构造。 但是,您似乎犯了一个经典的移植错误:您有一种使用语言A 的 解决方案 ,然后尝试将其翻译为语言B,这时您真正应该做的就是找出 问题 ,然后找出解决方法使用语言B。 我不能完全确定您要从那个小的代码段中解决什么问题,但是

  • Java7&8在使用Mockito和PowerMockRunner时弹出新的错误,当涉及静态final变量时,java将抛出字节代码异常中的错误。这是由于现在更严格的字节码验证和模拟静态最终对象编辑字节码,以便成功模拟。 我有以下的类,我试图嘲弄: 我已经看到,您可以通过使用反射来解决这个问题,这里看到了如何使用JUnit、EasyMock或PowerMock模拟静态最终变量,这里看到了Power