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()
}
posted @ 2022-03-20 12:47  学无终  阅读(484)  评论(0编辑  收藏  举报