添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
礼貌的土豆  ·  打开word出现‘Microsoft ...·  1 年前    · 
干练的面包  ·  Android ...·  1 年前    · 

PowerMockito.mockStatic(class) 模拟静态方法调用

为什么要写单元测试

  1. 给我们重构的信心(give us the confidence to refactor)。一堆纠缠而无测试的代码你敢随便修改?
  2. 好的单元测试就是文档 (documenting expected behavior)。几个实用的例子比文档让人感兴趣的多!
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.23.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.0</version>
            <scope>test</scope>
        </dependency>

模拟工具类调用静态方法

工具类:SysDataCodeUtils

@Slf4j
public class SysDataCodeUtils {
    public static String getNameByCodeAndValue(String code, String key) {
        try {
            List<SysDataCodeDTO> list = sysDataCodeService.getListByCode(code);
            for (SysDataCodeDTO dataCodeDTO : list) {
                if (dataCodeDTO.getCode().equals(key)) {
                    return dataCodeDTO.getValue();
        } catch (Exception e) {
            log.error("获取快速编码表异常:{}", e);
        return StrUtil.EMPTY;

测试类:ShareProfitRefundSettleServiceImplTest

@RunWith(PowerMockRunner.class)
@PrepareForTest({ SysDataCodeUtils.class })
public class ShareProfitRefundSettleServiceImplTest {
    @InjectMocks
    ShareProfitRefundSettleServiceImpl shareProfitRefundSettleService = new ShareProfitRefundSettleServiceImpl();
    @Mock
    ClearingDao clearingDao;
    @Before
    public void before(){
        log.info("start--------{}",this.getClass().getName());
        PowerMockito.mockStatic(SysDataCodeUtils.class);
        PowerMockito.when(SysDataCodeUtils.getNameByCodeAndValue("SHARE_PROFIT_REFUND_TERM", "SWITCH")).thenReturn("OPEN");

@RunWith(MockitoJUnitRunner.class):JUnit 使用 Mockito 模拟框架提供的“单元测试运行器。

@RunWith(PowerMockRunner.class):JUnit 使用 PowerMock 框架中的单元测试运行器。
(使用这些特定于框架的测试运行程序的要点是,它们负责使用特殊的特定于框架的注释初始化所有字段)。

因此,这里的区别仅在于:第一个示例是使用 Mockito 框架编写的,第二个示例是使用 PowerMock
编写的。*如果要模拟对静态方法的调用,需要使用 @RunWith(PowerMockRunner.class)。如果不需要模拟静态或私有函数,最好还是使用原生 MockitoJUnitRunner 进行单测。

@PrepareForTest({ SysDataCodeUtils.class }):当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。如果有两个不同类的静态方法需要验证呢,比如类A、类B,则只需要一起添加,用逗号隔开就可以了:@PrepareForTest({ A.class, B.class })。

@InjectMocks:创建一个实例,简单的说是这个Mock可以调用真实代码的方法,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。

@Mock: 创建一个Mock。

文章目录PowerMockito.mockStatic(class) 模拟静态方法调用为什么要写单元测试引入依赖模拟工具类调用静态方法注解说明PowerMockito.mockStatic(class) 模拟静态方法调用为什么要写单元测试给我们重构的信心(give us the confidence to refactor)。一堆纠缠而无测试的代码你敢随便修改?好的单元测试就是文档 (documenting expected behavior)。几个实用的例子比文档让人感兴趣的多!引入依赖
本文实例讲述了php中static静态属性和静态方法调用。分享给大家供大家参考。具体如下: 这里分析了php面向对象中static静态属性和静态方法调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。 header("content-type:text/html;charset=utf-8"); class Human{ static public $name = "小妹"; public $height
先说一下要怎么用: 除了一般的测试类写法,对于某些类(XXX.class)要加上@PrepareForTest 和 PowerMockito.mockStatic(XXX.class); @PrepareForTest({ XXX.class public class XXXXXXXXTe...
使用PowerMockito.mockStatic(class)创建静态类的mock对象 注意事项: 如果想对某个类的静态方法进行mock,则必须在PrepareForTest后面加上相应的类名,比如Utility.class. 当使用mockStatic方法对Utility.class进行了mock,那么此时该类中的所有方法实际上都已经被mock了, 如果没有对某个方法进行具体mock返回值...
PowerMockito mock静态类 1. Mock简介 一个大的项目中,类之间往往是相互依赖的,A类可能依赖B类,B类依赖C类。。。但是我们现在只想测试A类中的方法,如果不用Mock,就需要准备所有其他依赖类,并保证其他依赖类是正常工作的,非常麻烦。但是现在我们可以通过Mock造一个假的正确的B类结果出来,这样就将测试限制在对A类本身中,无需考虑其他依赖类。 SpringBoot的单元测试,...
1. 在使用PowerMockito之前,首先要了解到Mockito这个测试工具,因为PowerMockito就是基于Mockito增强了一些功能,比如静态方法的测试。这里的可以参考:基于Mockito的多层模拟单元测试 小结 2. 网上有很多PowerMockito mock静态方法的总结,以下主要是针对这几天使用过程中遇到的各种问题,从mock公共静态方法、私有方法两个方面进行总结。 3. 首先先是PowerMockito的pom.xml的依赖。 <properties> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> </dependency> <dependency> <groupId>org.powermock<
Mockito.mockStatic 返回为 void 方法时,可以使用 Mockito.doNothing() 来模拟该方法的行为。具体来说,可以使用以下代码: Mockito.mockStatic(YourClass.class); Mockito.doNothing().when(YourClass::yourVoidMethod); 其中,YourClass 是包含 void 方法的类名,yourVoidMethod 是该类中的 void 方法名。这样,当调用该方法时,就会执行 doNothing() 方法,即不做任何操作。
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment) BLANK......: 我的评价是不如报警告,全是白底黑字 log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment) BLANK......: 建了也没用 SpringMVC, Spring, Mybatis 搭建网上商城 行云有影月含羞: 大佬没有mapper映射啊 IDEA 创建新分支,合并代码 帅到被人乱砍的木瓜: hhhh,看见我骂人了?脑子有问题或这眼睛就去医院检查,免得影响市容,我都替你丢脸 IDEA 创建新分支,合并代码 神族依恋: 你这骂人骂得理直气壮的,你是来学习的,人家求你看人家的博客了?hh