• spock2.x结合mockito静态mock


    spock2.x开始已经移除了powermock,可以使用mockito-3.4.x之后的版本来解决

    mock静态工具类

    spock-1.x静态mock使用的是powermock,2.x之后可以结合Mockito-3.4及更新版本一起使用

    pom.xml

    <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-spring</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>4.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-inline</artifactId>
        <version>4.3.1</version>
        <scope>test</scope>
    </dependency>
    

    mocktio静态示例

    public class TestUtil {
        public static String getName(String name) {
            return "hello:" + name;
        }
    }
    

    junit5单元测试

    @BeforeAll
    public static void before() {
        MockedStatic<TestUtil> mockedStatic = Mockito.mockStatic(TestUtil.class);
    }
    
    @Test
    @RepeatedTest(value = 3)
    public void mockitoTest() {
        Mockito.when(TestUtil.getName("张三")).thenReturn("hello张三");
        Assertions.assertEquals(TestUtil.getName("张三"), "hello张三");
    
    }
    

    注意: RepeatedTest是重复执行多次,多个相同的静态方法按照官方示例执行一次不会报错,多次就报错了,所以使用Mockito.when().thenReturn()

    spock中where示例

        @Shared
        MockedStatic spring
        @Shared
        MockedStatic helper
    
        def setupSpec() {
            spring = Mockito.mockStatic(SpringContext.class)
            helper = Mockito.mockStatic(Helper.class)
        }
    
        def check() {
            given:"初始化入参"
            def queue = new QueueCommon(1, 123)
            def queueCheck = new QueueCheck(id: id, auto: false)
    
            and:
            queueResultMapper.selectList(1, 123, _, null) >> new ArrayList()
            queueMapper.selectList(1, 123, _, null) >> listQueue
            queueMapper.updateStatus(*_) >> 1
    
            and:
            Mockito.when(Helper.getItem(Constant.QUEUE_STATUS,   "0101")).thenReturn(CommonConstant.getItem("0101"));
    Mockito.when(Helper.getItem(Constant.QUEUE_STATUS,
    "0102")).thenReturn(CommonConstant.getItem("0102"));
    Mockito.when(Helper.getItem(Constant.QUEUE_STATUS, "0103")).thenReturn(CommonConstant.getItem("0103"));
    Mockito.when(Helper.getItem(Constant.QUEUE_STATUS, "0201")).thenReturn(CommonConstant.getItem("0201"));
    Mockito.when(Helper.getItem(Constant.QUEUE_STATUS,   "0202")).thenReturn(CommonConstant.getItem("0202"));
            
    expect:
    queueServiceImpl.check(queueCommonKey, queueCheck, getOperation(44805379620934L)) == true
    
            where:
            idQueue   || listQueue | listQueueResult
            123||  Arrays.asList(CommonConstant.getQueueById(123)) | Arrays.asList(CommonConstant.getQueueResultById(123))
            456||  Arrays.asList(CommonConstant.getQueueById(456)) | Arrays.asList(CommonConstant.getQueueResultById(456))
        }
    
    def cleanupSpec() {
        spring.close()
        helper.close()
    }
    
  • 相关阅读:
    java.io.Serializable浅析
    SSH和SSM的区别
    [转]github详细教程
    GITHUB的使用
    常用端口-小结
    DNS的解析原理
    windows快捷键-小结
    ip地址0.0.0.0是什么意思
    windows插件框架下载地址
    redis和mongodb
  • 原文地址:https://www.cnblogs.com/javashare/p/16029609.html
Copyright © 2020-2023  润新知