gpt4 book ai didi

java - 查找单个方法调用所依赖的所有类/Arquillian Micro Deployments : How to collect necessary classes autmatically?

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

嘿!

我发现的问题很容易理解,但我找不到解决方案。

首先让我提供这个小片段。

@Deployment
public static Archive<?> createDeployableArchive () {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "whoCares.jar");
// enable CDI
jar.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml");

// Some persistence
jar.addAsManifestResource("test-persistence.xml", "persistence.xml");

// Now the interisting part (simplified):

jar.addClass(RegistrationService.class) // This one should be tested
.addClass(RegistrationException.class) // Will be thrown on error.
.addClass(UserDAO.class) // Used by RegService
.addClass(User.class) // JPA Entity
// ...
// ... This scenario goes without interfaces, inheritance, DTOs, different
// ... types of exceptions for different problem types... That's why the list
// ... is so concise.
// ...
.addClass(RegServiceIntegrationTest.class); // Test class must be included

return jar;
}

每次您想要使用 arquillian 测试某个用例(例如 registerUser)时,您都必须收集注册过程所依赖的所有类,并将它们放在可部署的存档中。

手动执行此操作肯定会花费时间并产生问题和错误!有几个弱点:

收集:想象一个包含许多子服务、异常、接口(interface)、父类(super class)、实用程序等的长流程。您将遍历完整的流程来找到它们。老实说,这是一项重复性的长期工作,会让......眼睛感到痛苦。在我决定开始大喊大叫之前,我不得不这样做几次。

使您的测试保持最新:想象一下您的注册链中包含了一个新的子服务。您将必须更新那些该死的依赖项,如果在一天结束时运行集成测试时出现问题,有时会很有趣地挖掘不完整的异常消息(不完整是因为您只知道在某些时候缺少某些东西,但不知道是什么)确切地)。如果幸运的话,会发生 ClassNotFoundException。一项更改当然很容易影响多个测试:1. 让 UserDao 抛出一些新的奇特的运行时异常。2.浪费你一生的时间。

添加包的问题:添加包是由 Shrinkwrap 提供的,但使用它是一个坏主意。有时,经过漫长的一天后,您会感到懒惰,只是添加完整的包,但您能绝对确定每个类将永远保留在同一个包中吗?另一个问题是术语“微部署”意味着对紧凑性的需求。整个包会带来开销,好吧,我想这是最小的问题。

如何解决这个问题(只是不合格的想法)?

源代码中已经提供了所有必需的信息,这有点平庸。

最好的解决方案是这样的:

@Deployment
public static Archive<?> createDeployableArchive () {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "whoCares.jar");

// enable CDI
jar.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml");

// Some persistence
jar.addAsManifestResource("test-persistence.xml", "persistence.xml");


Class<?>[] involved;
involved = Tool.findInvolvedClasses("RegistrationService.java", "registerUser");
jar.addClasses(involved);

return jar;
}

我认为人们无法使用反射来实现这一目标,因为有必要知道确切的“流程”。

我打赌有一个很酷的工具可能会被用于意想不到的用途。当然可能还有其他方法。有人有想法吗?谢谢!

最佳答案

您可以尝试 Arquillian integration in JBoss Tools 。您将找到一些有关如何使用它的信息,in this GitHub repo ;请参阅自述文件。那里链接的截屏视频可能有用。

要开始使用 JBoss Tools,您可以通过 JBT 更新站点将其安装到现有的 Eclipse Kepler (e4.3) 或更高版本, these instructions .

请注意,目前这被认为是实验性的,因此它不包含在 JBoss Developer Studio(打包 Eclipse 和一些插件的发行版)中,并且仅在社区位(即 JBoss Tools)中可用。如果您在 JBoss Tools JIRA 中提交遇到的任何问题(或任何新功能请求),我们将不胜感激。 (请使用测试工具组件)。

关于java - 查找单个方法调用所依赖的所有类/Arquillian Micro Deployments : How to collect necessary classes autmatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838970/

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