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来解决,具体的可以搜索。

  • 相关阅读:
    【pytest】(六) pytest中fixture的使用
    【pytest】(七) pytest的一些你爱不释手的插件
    【pytest】(五) pytest中的断言
    【pytest】(四) pytest的一些其他的运行用法
    本两周学习总结
    本两周学习总结
    本两周总结
    本两周学习总结
    本周学习总结(原生)
    本周学习总结(原生)
  • 原文地址:https://www.cnblogs.com/zwwang/p/15105173.html
Copyright © 2011-2022 走看看