当前位置: 首页 > 知识库问答 >
问题:

从Groovy测试用例中模拟Java类

张权
2023-03-14

我试图用groovy为一个用Java编写的类编写一个测试用例。Java类(名称:helper)中有一个方法,在该方法中获取HttpClient对象并对其调用executeMethod。我试图在groovy测试用例中模拟这个HttpClient.executeMethod(),但不能正确地模拟它。

public class Helper{

public static message(final String serviceUrl){   
----------some code--------

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

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

}
}
    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)

            }   
        }

任何关于它为什么不正确嘲笑的想法。提前致谢

共有1个答案

任小云
2023-03-14

它不起作用是因为编译后的Java类在构造HttpClient实例时不通过Groovy的元对象协议(MOP),所以没有实例化模拟对象。

由于HttpClient实例是线程安全的,我会考虑将它作为依赖项注入到类中,这样测试就可以简单地注入模拟。

 类似资料:
  • 我用Mockito进行了Java测试: Kotlin.TypeCastException:null不能强制转换为非null类型java.util.HashMap 如何正确模拟属性?

  • 我有两个Go测试用例,如下所示,测试一个名为的gRPC函数。 应该在它选择的数据库行具有Field1=="A"时成功,否则返回错误。 我正在用Data dog提供的go sqlmock包模拟数据库。 当我单独运行这两个测试用例时,它们都通过了。 但是当我一起运行它们时,失败,因为它认为Field1==“Z”。显然,正在干扰。为什么? 似乎在案例中执行的模拟在到达时仍然有效,而我在案例中执行的模拟被

  • 本节介绍与Java 9相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 Java 9 Mock Test I 问题1 - Java 9的主要目标是 A - 使JDK和Java Standard Edition平台模块化,因为它可以很好地降低到小型计算设备。 B - 提高JDK和Java实现的整体安

  • 本节介绍与JAVA XML Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JAVA XML Mock Test I 问题1 - XML代表什么? A - 额外的标记语言 B - 可扩展标记语言 C - Extensible Marked Literal D - 额外标记语言

  • 简介 在 Laravel 应用程序测试中,你可能希望「模拟」应用程序的某些功能的行为,从而避免该部分在测试中真正执行。例如:在控制器执行过程中会触发事件(Event),从而避免该事件在测试控制器时真正执行。这允许你在仅测试控制器 HTTP 响应的情况时,而不必担心触发事件。当然,你也可以在单独的测试中测试该事件逻辑。 Laravel 针对事件、任务和 Facades 的模拟,提供了开箱即用的辅助函

  • #使用Mocks测试 在现实世界的应用程序中,我们的组件很可能具有外部依赖性。当为组件编写单元测试时,如果我们可以模拟这些外部依赖性,以使我们的测试仅依赖于被测试组件的行为,这将是理想的。 vue-loader提供了一个特性,它允许你使用inject-loader向*.vue组件注入任意依赖项。一般的想法是,不是直接导入组件模块,我们使用inject-loader为该模块创建一个“模块工厂”函数。