在尝试模拟一种静态void方法时,我尝试了PowerMock,但始终遇到NullPointer异常。

我们正在尝试模拟以下通话-

public Class XYZ{
  public void method1(){
     ....
     SampleClass.methodTypeStatic1().methodTypeStatic2("xyz", "mno", classVeriable);
}

最主要的是-

public class SampleClass implements SampleClassParent{

private static SampleClass var1;

public static SampleClass methodTypeStatic1(){
    if (var1 == null) {
        //Do something on var1
    }
    return var1;
}

public void methodTypeStatic2(String localVar1, String localVar2, DifferentStaticClass localVar3) {
    //Do something
}}

我正在尝试在测试类中以这种方式模拟通话-

@RunWith(PowerMockRunner.class)
@PrepareForTest({SampleClass.class})
public class XYZTest{

   @InjectMocks
   XYZ xyzTestService;

   @Test
   public void testMethod1(){
     ...
     PowerMockito.mockStatic(SampleClass.class);
     PowerMockito.doNothing().when(SampleClass.methodTypeStatic1());
     xyzTestService.method1();
}

另外要提到的是SampleClass.class不是我们的代码的一部分,我们已经将此外部类导入到我们的代码库中以执行某些任务。

#1楼 票数:0

如果要模拟非无效方法,则需要在模拟中为此方法定义行为。 您可以免费获得doNothing (因为这就是doNothing的作用),但是您需要定义该方法应返回的内容。

您的测试可能如下所示:

@Test
public void testMethod1() {

    SampleClass sample = new SampleClass();

    PowerMockito.mockStatic(SampleClass.class);
    PowerMockito.when(SampleClass.methodTypeStatic1()).thenReturn(sample);

    XYZ xyzTestService = new XYZ();
    xyzTestService.method1();
}

您没有提及任何@Mock批注,因此使用@InjectMocks除了创建XYZ对象外,对您没有任何帮助。

  ask by Arijit Roy translate from so

未解决问题?本站智能推荐:

1回复

Mockito间谍不适用于工厂bean方法

我有一个Springboot,我正在为此编写单元测试。 有一个factoryBean,我可以在其中获取服务对象。 我想测试该服务对象上的特定方法是否被调用。 这是应用程序代码 这是我的单元测试 测试失败,当我通过调试器运行时,我看到该句柄被调用。 那么这是怎么了?
1回复

PowerMockito 在定义第二个“when”子句时调用模拟对象上的真实方法

当使用不同参数调用方法时,我试图定义一些不同的模拟行为。 不幸的是,我发现第二次尝试在(模拟的)类上模拟给定的方法时,它运行了实际的方法,由于匹配器不是有效参数而导致异常。 有谁知道我如何防止这种情况发生?
1回复

如何使用 spring boot SpringJUnit4ClassRunner 模拟方法,其中使用 mongo tamplate 方法包含静态调用

我正在共享一个包含静态方法调用的方法代码。 我需要模拟我分享的这个方法。 我尝试了很多方法但得到空指针
1回复

PowerMock 不会模拟静态方法在 Spring-Boot 应用程序中抛出异常

我意识到有很多非常相似的问题。 我已经经历了所有这些,但我仍然无法使我的代码工作。 我在 Spring-Boot 应用程序中定义了一个服务,就像这样: 我想测试场景,当目录创建失败时,我需要模拟方法 Files.createDirectories()。 我的测试类如下所示: 我相信我遵循了
1回复

如何为 Java 8 Predicate 编写 Mockito 测试

我正在使用 Spring Boot REST 和 Mockito。 如何编写测试用例? 错误: 代码 测试用例
1回复

如何使用Java JUnit和Mockito(Spring Boot)验证传递给静态函数的参数

我是所有提到的技术的新手,所以这可能是一个愚蠢的问题。 我们有一个spring boot应用程序,我们需要通过JDBC写入PostgreSQL数据库。 因此,我们需要静态DriverManager.getConnection()方法来打开连接。 现在在我的单元测试中,我不想直接调用
2回复

模拟私有方法并创建新对象

我写了一个类,它读取整个文件并返回内容。 现在,在我的测试类中,我不希望我的测试实际从中读取文件,因此我试图模拟方法classPathResource.getFile()但不知何故,如果不编写PrepareForTests()和如果我这样做的话,JaCoCo中不计入这些测试。 我已
1回复

如何模拟对模拟方法的响应调用的方法

我有一堂课 如果抛出 NotFound 异常,我必须测试 method1 是否返回 null,我将在测试类中为 DbObject 创建 @MockBean。 如何编写 when 条件来模拟 getItem()。 when(DbObject.method1("query")).thenThrow