首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mockito - mocked静态方法总是返回null

Mockito是一个Java的开源测试框架,用于模拟对象和行为,以便进行单元测试。它可以帮助开发人员在测试过程中创建和配置模拟对象,以模拟真实对象的行为。

对于mocked静态方法总是返回null的情况,这是因为Mockito无法直接模拟静态方法的行为。Mockito只能模拟对象的实例方法,无法直接模拟静态方法的返回值。

解决这个问题的一种方法是使用PowerMock,它是一个与Mockito兼容的扩展框架。PowerMock可以模拟静态方法的行为,使其返回期望的结果。使用PowerMock,您可以在测试中模拟静态方法的返回值,而不是返回null。

以下是使用PowerMock和Mockito模拟静态方法的示例代码:

代码语言:txt
复制
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import static org.mockito.Mockito.when;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(YourClassWithStaticMethod.class)
public class YourTestClass {
    
    @Test
    public void testYourMethod() {
        // 模拟静态方法的返回值
        PowerMockito.mockStatic(YourClassWithStaticMethod.class);
        when(YourClassWithStaticMethod.yourStaticMethod()).thenReturn("mocked value");
        
        // 调用被测试的方法
        YourClass yourClass = new YourClass();
        String result = yourClass.yourMethod();
        
        // 断言结果
        assertEquals("mocked value", result);
    }
}

在上面的示例中,我们使用了PowerMock和Mockito来模拟静态方法的行为。首先,我们使用PowerMockito.mockStatic()方法来模拟静态方法的行为。然后,使用when().thenReturn()来指定模拟方法的返回值。最后,我们调用被测试的方法,并断言结果是否符合预期。

需要注意的是,使用PowerMock和Mockito来模拟静态方法需要额外的配置和依赖项。您需要在测试类上使用@RunWith(PowerMockRunner.class)注解,并使用@PrepareForTest注解来指定需要模拟的类。此外,您还需要添加PowerMock和Mockito的相关依赖项到您的项目中。

希望这个答案能够帮助您理解如何使用Mockito和PowerMock来模拟静态方法的行为。如果您需要更多关于Mockito和PowerMock的信息,可以参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mockito测试final类static方法自己new的对象

里面用到的NewObject,并不是@Autowired之类由Spring注入的,而是自己new的 2. helloWorld里,使用了final类的静态方法,以及obj的普通方法。...在3.4以下的低版本mockito中,如果想mock helloWorld方法是很困难的,但在高版本中功能有所加强,参考下面的代码: import org.junit.Test; import org.junit.runner.RunWith...= Mockito.mockStatic(FinalSampleUtils.class); //mock不带参数的static方法 mocked.when(FinalSampleUtils...::foo).thenReturn("bbb"); //mock带参数的static方法 mocked.when(() -> FinalSampleUtils.bar(...从输出上看,不管是带参还是不带参的static方法,都成功mock,返回了mock后的值,而且自己new的对象,也同样mock成功了。

6.1K10
  • Microsoftthrifty:RPC方法返回NULL的异常处理

    https://blog.csdn.net/10km/article/details/86244875 我们知道:thrift框架是不允许返回值为null的,如果返回值为null,client...端会抛出异常,我在之前用facebook/swift框架时就遇到了这个问题,这是当时解决问题的记录《thrift:返回null的解决办法》,现在使用Microsoft/thrifty框架实现的客户端同样也存在这个问题..., "Missing result"); } } } 可以看到,返回结果为null时,会抛出类型为MISSING_RESULT的ThriftException异常。...知道了原因,解决问题的方法有了: /** * 当前调用的回调函数,由当前接口方法设置 */ final ServiceMethodCallback callback =...Override public void onError(Throwable error) { // 如果关闭时有异常,则将异常转给callback对象, // 当方法返回值为

    1.4K40

    不会测试的程序员不是好程序员(一文让你掌握JMockit的使用)

    Mock工具的种类: 常见的EasyMock、Mockito等。   ...1、Record(录制): 即先录制某类/对象的某个方法调用,在当输入什么时,返回什么。 2、Replay(重放): 重放测试逻辑,实际上就是调用上面录制的方法 3、重放后的验证。...二: JMockit常用API注解及区别   (一) @Mocked:修饰类/接口时,就是告诉JMockit,生成一个被修饰类/接口的Mock对象,这个对象中方法(包含静态方法)返回默认值。...即如果返回类型为原始类型(short,int,float,double,long)就返回0,如果返回类型为String就返回null,如果返回类型是其它引用类型,则返回这个引用类型的Mocked对象(就类型与生成一个假对象...(三) @Injectable注解:作用是告诉JMockit生成一个Mocked对象,但@Injectable只是针对其修饰的实例,而@Mocked是针对其修饰类的所有实例,@Injectable对类的静态方法

    1.5K10

    在用Mockito做单元测试时如何使用doAnswer…when

    添加关注 刚使用Mockito来做Java项目的单元测试时,对doAnswer…when的使用场合不怎么理解,查了Mockito的官方文档和网上的各种资料,感觉都说得不够清楚。...原来,doAnswer…when和when…thenReturn的功能类似,都是用于给模拟对象指定调用其方法后的返回值,只不过二者有如下区别: 01 when…thenReturn: 当我们为模拟对象指定调用其方法返回值时...02 doAnswer…when: 当模拟对象调用它的方法,需要执行一些操作(其实就是需要执行一个代码块)才能得到返回值时,则需要使用doAnswer来构造产生这个模拟的返回值。...例如:当模拟对象调用某个方法返回值是个复合值(bean)时,就需要用doAnswer来构造该返回值。...这个模拟对象指定当它调用getSecurityId()这个方法时, 将得到 "testSecurityId" 这个字符串作为返回值。

    11.6K10

    MeterSphere单元测试-Mockito-Inline出场

    ,而andWorkspaceIdEqualTo(String workSpaceId)方法中如果入参为null,则会抛出空指针异常。...因此,一个看似只有2-3行的代码段,在使用Mockito造完测试桩之后,我们发现还有2个静态方法需要处理才能实现最初的测试目的,模拟测试计划名称重名的场景。...测试用例-Mockito-Inline登场 在使用Mockito来mock testPlanMapper模拟数据库返回的基础上,还需要额外对以下两个两个静态方法的调用进行Mock。...mock静态方法的能力,只是目前还没有被吸收进Mockito-core中,因此,需要将Mockito的依赖修改为对Mockito-Inline的依赖。...因此,额外引入了Mockito-Inline来mock 静态方法让整个测试桩能符合测试场景的要求,并最终执行成功。

    3.3K10

    junit4整合PowerMockito进行单元测试

    ,单测要覆盖到方法中的每一行代码 自动断言:每一段单测代码都应该有自己的断言方法,而不是通过打印再人工查看正确性 所以我们就有了Mockito,它可以模拟对象,模拟对象方法返回值,来完成mock...本文使用的是PowerMockito,它是由Mockito的基础上开发而来,语法规则基本一致,同时也有一些自己的增强,可以对静态方法,局部变量进行mock。...三、其他使用 1)如何对无返回值的方法进行断言 假设有一个无返回值的方法,我们要针对它进行测试。...由于它没有返回值,就没有办法对其返回值进行断言校验。 那么针对这种情况,一个方法,就算是无返回值的情况。内部一定做了一些什么操作。...mock 如何对静态方法返回值进行mock 先在PowerMockitoServiceImpl.java添加一个静态方法,其中发现HttpUtil.get()是一个静态方法 @Service public

    1.1K40

    Spock框架Mock对象、方法经验总结

    +,Spock自带的Mock和Spy足够好了,对于对象行为的模拟满足绝大部分场景,但是涉及静态方法模拟时候存在局限性,所以引入Mockito和PowerMock来实现设计静态方法的测试模拟场景。...其他定义Mock行为的语法如下: service.getAllGroup(_,_) >> null//返回null service.getAllGroup(_,_) >>...其他常用定义行为: Mockito.when(newutil.filter(Mockito.any())).thenReturn(null) Mockito.when(newutil.filter...(Mockito.any(ArrayList.class))//dothing,什么都不做 第三个例子中我们假设filter方法是一个无返回的void方法。...通常我们需要构建返回对象,如果对象需要赋值的属性过多,可以使用初始化赋值的方法,下面是Mock一个返回list的方法返回值的Demo: Mockito.when(newser.selectAllService

    5.2K74

    JAVA实战:如何让单元测试覆盖率达到80%甚至以上

    (几乎不会使用)Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ):后面自定返回结果,需要和方法返回结果类型一致,Mockito.any():用于匹配任意类型的参数详细版...具体来说,Mockito.when()方法接受两个参数,一个是模拟对象的方法调用,另一个是指定的行为或返回值。当模拟对象的方法被调用时,Mockito就会按照when()方法中指定的方式进行处理。...例如,可以使用Mockito.when()方法来模拟一个方法返回值.需要注意的是,Mockito.when()方法并不会真正地执行方法,而是返回了一个指定的返回值或设定的行为,用于在测试中进行验证。...具体来说,Mockito.any()方法可以用于模拟对象的方法调用或验证方法调用时的参数匹配。需要注意的是,当使用Mockito.any()方法时,需要确保模拟方法返回值与模拟方法的参数类型兼容。...需要注意的是,如果想要通过ReflectionTestUtils.setField()方法修改的变量是静态的,那么第一个参数应为null,因为静态变量属于类级别的而不是实例级别的。

    3.7K31

    #Android单元测试学习总结「建议收藏」

    Mock方法内部new出来的对象 3. Mock普通对象的final方法 4. Mock普通类的静态方法 5. verify静态方法的调用次数 6. 使用真实返回值 7. Mock私有方法 8....默认情况下,Mock出的对象的所有非void函数都有返回值,对象类型的默认返回的是null,例如返回int、boolean、String的函数,默认返回值分别是0、false和null。...,而getName()返回值是String类型的,因此直接调用的话会返回String的默认值null,所以上面代码如果要想输出getName()方法的真实返回值的话,需要设置doCallRealMethod...,测试静态方法之前需要调用PowerMockito.mockStatic()方法来mock静态类,然后就通过when().thenReturn()方法指定静态方法的模拟返回值即可。...使用真实返回值 如果在测试的过程中又遇到不需要mock出来的静态方法的模拟返回值,而是需要真实的返回值,怎么办呢,其实跟Mockito一样,PowerMockito同样提供thenCallRealMethod

    5.1K20
    领券