zoukankan      html  css  js  c++  java
  • LLT补充时遇到的困难与解决办法

    • 在LLT测试案例中,如何Mock静态方法?
    • 如何Mock无返回值的方法?
    • 如何Mock静态无返回值的方法?
    • 在Mock的时候,如果使用Mockito.when(method(any,any,any,any)).thenReturn()打桩的时候,如果Mock的方法中输入的参数都使用Mockito.Any()方法时,会报nullException,这是为何?
    • 如何Mock类中的私有方法

    20210813解决2021082—0806这周遇到的问题

    如何Mock静态方法?

    在LLT中,现在常用的有两种,Mockito和PowerMock,后者在前者的基础上能够对static方法,private方法,final方法进行mock,相当强力,使用PowerMock需要引用使用注解

    @RunWith(PowerMockRunner.class)

    @PrepareForTest(静态方法所在类.class)

    代码模板如下:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest(静态方法所在类.class)
    
    public class nameTest {
        
        .....
            
        @BeforeEach
            public  void setUp(){
            PowerMockito.mockStatic(静态方法所在类.class)  //powermockito要在innitMocks之前
               MockitoAnnotations.innitMocks(this);
            ....
                
        }
        
        @Test
          public void methodName(){
              ...
                  PowerMockito.when(静态方法所在类名.静态方法()).thenReturn();  
              ...
          }
    }
    

    注意这里导入的包应该是

    import org.junit.Test;
    import org.powermock.api.mockito.PowerMockito;
    

    在开发的时候如果在加了PrepareForTest注解后还是报not prepared for test 那尝试检查一下导入的test包是否支持powermock

    import org.junit.jupiter.api.Test;  // 这个Test包不支持powerMock
    

    如何Mock无返回值的方法

    1. 使用Mockito.doAnswer( ),使该方法进行制定的应答处理

    2. Mockito.doNothing( ),使其不进行操作

      ...

    如何Mock静态无返回值的方法?

    使用PowerMock来模拟静态方法,参照上述代码模板,然后再通过doNothing,或者doAnswer来进行处理即可

    方法一: 在执行该方法是进行制定的操作
        PowerMockito.doAnswer(new Answer(){ 匿名类实现接口Answer中的answer抽象方法}).when(staticSource.class);
       staticSource.method();
    
    方法二: 在执行该方法时不执行任何实际的操作
        PowerMockito.doNothing().when(StaticSource.class);
        staticSource.method();
    
    方法三: 在执行该方法的时候抛出指定的异常
        PowerMockito.doThrow(Exception e).when(staticSource.class);
        staticSource.method();
    
    在Mock的时候,如果使用Mockito.when().thenReturn()打桩的时候,当Mock的方法中输入的参数都使用Mockito.Any()方法不指定类型时,会报nullException,这是为何?

    初步参考资料是因为对象引用的地址不一致导致的,当使用any进行匹配的时候:

    1. when中的方法参数全部都需要使用匹配器any,并且需要指定类型,否则会空指针异常
    2. 如果像使用any匹配,有需要指定参数,则需要使用Mockito.eq( 参数),不能直接混用
    3. 注意当mock的方法输入参数可能为null的情况,此时需要使用any(),而不是anyString( )
    如何Mock类中的私有方法

    私有方法同样是使用powerMock来解决,具体的可以搜索。

  • 相关阅读:
    解决 minwidth 在 IE6 中无效的方法
    SmallSlider 图片轮播插件
    css li中a的高端与li的高端不一致,解决方案
    为什么height:5px在IE6里显示不正常?
    命令提示符下不能输入中文
    Sql中日期差 Sql中 DateDiff Sql 中时间差
    20100420 18:17 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
    多个表结果的并列显示
    linux系统下载地址
    VMware中Shared Folders(共享文件夹)的配置
  • 原文地址:https://www.cnblogs.com/zwwang/p/15105173.html
Copyright © 2011-2022 走看看