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

功能测试中的JMockit+Jetty

岳英耀
2023-03-14

问题:

当我启动我的测试jetty-server并制作我的控制器模型时,模型不起作用!我认为原因是不同的ClassLoader:jMockit-AppClassLoader,jetty-WebAppClassLoader。

问题:

您应该看到JettyDeploymentIntegrationUnitTestCase.RequestWebApp方法:在这些方法中,我们使mock不起作用。

您可以检查Jetty&JMockit是通过兄弟类装入器装入类的,所以JMockit根本看不到Jetty的类

URLClassLoader
|
|-Launcher$AppClassLoader
|-WebAppClassLoader

共有1个答案

卞昀
2023-03-14

示例项目中的JUnit测试试图模拟ForwardingServlet类。但是,在这个嵌入式Jetty web服务器的场景中,实际上有这个类的两个实例,它们都加载在同一个JVM中,但通过不同的类加载器。

类的第一个实例由常规classloader加载,通过常规classloader从启动JUnit测试运行程序的线程(AppClassLoader)加载类。因此,当ForwardingServlet出现在测试代码中时,它就是这个类加载程序中定义的代码。这是给JMockit的类,要mock,这正是发生的事情。

然后,使用Jetty的WebAppClassLoader在部署的web应用程序中加载ForwardingServlet的副本(来自文件系统中的“.class”文件,因此不受JMockit应用的模拟的影响,后者仅在内存中)。JMockit从来没有看到过这个类。

对此问题有两种可能的解决方案

>

  • 以某种方式获取由WebAppClassLoader加载的类对象,然后通过调用mockup(class)构造函数来模拟它。

    配置Jetty服务器,使其不为web应用程序中的类使用自定义类加载器。

    handler.setClassLoader(ClassLoader.getSystemClassLoader());
    

  •  类似资料:
    • 主要内容:功能测试的目标功能测试是软件测试的一个分支,旨在验证软件应用程序的功能,而不管功能是否根据需求规范运行。通过给出适当的输入值,确定输出并使用预期输出验证实际输出来测试每个功能。 功能测试包括通过GUI(图形用户界面),API(应用程序接口),安全性,数据库,客户端应用程序,服务器应用程序和应用程序功能进行测试。黑盒测试方法用于功能测试,其中测试内部逻辑的工作而不窥视内部代码。 功能测试的目标 功能测试的目标是检

    • 功能测试从用户的角度验证场景。它类似于验收测试。 但是它不是通过 HTTP 进行通信,而是填充环境,如(填充)POST 和 GET 参数, 然后直接在代码里执行 Application 实例。 功能测试通常比验收测试快,并且在失败时提供详细的堆栈跟踪。 根据老司机的经验,功能测试应该是首选的,除非有专门的 Web 服务器设置 或者由 JavaScript 构建的复杂 UI。 功能测试是借助于具有良

    • 主要内容:为什么进行非功能性测试,在非功能测试下测试的参数,非功能测试的优点,非功能测试的缺点非功能测试是一种软件测试,用于测试非功能性参数,例如:软件的可靠性,负载测试,性能和责任。非功能测试的主要目的是根据非功能参数测试软件系统的读取速度。在功能测试之前,从未测试过非功能测试的参数。 非功能性测试作为功能测试也非常重要,因为它在客户满意度中起着至关重要的作用。 例如,非功能性测试将测试有多少人可以同时在任何软件上工作。 为什么进行非功能性测试 功能和非功能测试对于新开发的软件都是强制性

    • 自动化测试平台 SWATHub 是 DaoCloud 的合作伙伴,他们为各类互联网应用提供了自动化测试的服务。我们推荐 DaoCloud 用户在完成持续集成单元测试等环节后,把应用部署在测试集群之上,运行自动化测试,进一步检验软件质量。以下内容由 SWATHub 提供。 SWATHub 是云端的自动化测试 SaaS 平台。通过创新的非编码的流程搭建和执行方式,SWATHub 能够帮助团队简单、高效

    • 是否有人能够从Maven Build获得JaCoCo中JMockit和Powermock单元测试的复盖范围? 我有一个Powermock单元测试的现有测试集,我希望逐步将其迁移到JMockit。但是我需要能够在一个报告中看到所有单元测试的测试覆盖范围,最好是在Sonar中。 通过将JaCoCo置于“脱机”模式,我确实使JMockit和Powermock测试与Surefire/JaCoCo一起运行(

    • 对于刚开始正式接触契约测试的团队,对于契约测试和功能测试之间的区别经常会存在争论。难就难在其实并不存在什么非黑即白的答案,更为重要的应该是逐渐加深对契约测试的理解和使用。 使用契约测试常见的场景,是验证规则或者处理错误请求。例如,我们有一个用户服务,允许消费者使用POST请求注册新用户,并在HTTP Body中包含所创建用户的详细信息。 一个简单的消费者与提供者交互的常规场景如下所示: Given