gpt4 book ai didi

groovy - Spock - 模拟外部服务

转载 作者:行者123 更新时间:2023-12-02 06:15:21 24 4
gpt4 key购买 nike

我是 spock 框架测试的新手,我没有找到任何可以找到所需信息的示例。因此,我认为最好的方法是展示我需要的示例。

  1. 例如spock 中的测试类:

    def "getData" (){ // this is test of getData method from ExternalService
    when:
    Result result = externalService.getData()
    then:
    result.msg = 'SUCCESS'
    }
  2. 服务等级:

    public class ExternalService(){
    private ServiceConnector serviceConnector;

    public Result getData(){
    Result result = serviceConnector.callAndGet();
    prepareInformation(data);
    updateStatuses(data);
    return result;
    }
    }
  3. 将数据分类为域类:

    public class Data {
    private String msg
    private int Id
    // +getters/setters
    }

现在我有 getData 测试并且想模拟唯一的方法 callAndGet()。这意味着每次我调用 callAndGet 时,我都需要有带有 msg SUCCESS 的对象数据,但是应该正常调用 getData 方法中的所有其他方法。

是不是很明白?问题是我们如何将服务类 ExternalService 注入(inject)/模拟到 spock 测试类中?

最佳答案

您需要做的是模拟 ServiceConnector 类并通过构造函数(例如)传递它。见下文:

@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')


import spock.lang.*

class Test extends Specification {
def 'some spec'() {
given:
def serviceConnector = Mock(ServiceConnector) {
callAndGet() >> new Result(msg: 'SUCCESS')
}
def externalService = new ExternalService(serviceConnector)

when:
Result result = externalService.getData()

then:
result.msg == 'SUCCESS'
}
}

public class ExternalService {
private ServiceConnector serviceConnector

public ExternalService(ServiceConnector serviceConnector) {
this.serviceConnector = serviceConnector
}

public Result getData() {
Result result = serviceConnector.callAndGet()

prepareInformation(result)
updateStatuses(result)
result
}

private void prepareInformation(Result data) {
}

private void updateStatuses(Result data) {
}
}

public class ServiceConnector {
public Result callAndGet() {

}
}

public class Result {
String msg
}

关于groovy - Spock - 模拟外部服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36279993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com