gpt4 book ai didi

java - 在 Groovy 中模拟 HttpClient

转载 作者:行者123 更新时间:2023-12-02 07:35:42 29 4
gpt4 key购买 nike

Possible Duplicate:
Unit Testing a static method in a Java Class from Groovy Test case

我正在尝试使用 groovy 对 java 类进行单元测试 Helper其中有一个静态方法,其中 HttpClient获得executeMethod被调用。为了对这个类进行单元测试,我试图模拟这个 httpClient.executeMethod()在 Groovy 测试用例中,但我无法正确模拟它。

下面是Java类

public class Helper{

public static message(final String serviceUrl){

HttpClient httpclient = new HttpClient();
HttpMethod httpmethod = new HttpMethod();

// the below is the line that iam trying to mock
String code = httpClient.executeMethod(method);

}
}

关于如何从 Groovy 单元测试这个静态方法有什么想法吗?自 httpClient对象位于类方法内部,如何在 Groovy 测试用例中模拟该对象?

这是我迄今为止的测试用例。我试图模拟为空,但没有发生......

void testSendMessage(){
def serviceUrl = properties.getProperty("ITEM").toString()

// mocking to return null
def mockJobServiceFactory = new MockFor(HttpClient)
mockJobServiceFactory.demand.executeMethod{ HttpMethod str ->
return null
}

mockJobServiceFactory.use {
def responseXml = helper.message(serviceUrl)

}
}

最佳答案

从 Java 类的静态方法中显式调用 HttpClient 构造函数的设计将很难进行模拟测试。 Grails 模拟工具无济于事,因为它们只能模拟 Groovy 代码中的调用,而不能模拟 Java 代码中的调用。如果您的帮助程序类是用 Groovy 编写的,您可能会更幸运。

更好的设计是使用带有实例方法而不是静态的单例服务(或其他 Spring bean),并使用某种依赖注入(inject),要么是 HttpClient 实例,要么是某种返回 HttpClient 的工厂对象。在测试中,您可以用模拟工厂替换该工厂。

关于java - 在 Groovy 中模拟 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268506/

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