海!
我发现的问题很容易理解,但我找不到解决方案。
首先让我提供这个小片段。
@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;
}
每次要测试某个用例时,例如registerUser,使用arquillian,您将必须收集注册过程所依赖的所有类,并将它们放在一个可部署的存档中。
手动执行此操作会花费时间并产生问题和错误,当然!有几个弱点:
收集:考虑一个包含许多子服务,异常,接口,超类,实用程序等的长进程。您将遍历完整的流程以找到它们。老实说,这是一个重复的长期工作,这将是一个痛苦...... 眼睛。在我决定开始大喊大叫之前,我不得不这样做几次。
让您的测试保持最新状态:想象一下,您将新的子服务纳入您的注册链。你将不得不更新那些该死的依赖项,如果在一天结束时运行集成测试时出现问题,将会很有趣地挖掘有时不完整的异常消息(不完整的原因你只知道某些东西在某些时候缺失但不是什么究竟)。如果你很幸运,会发生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;
}
我不认为可以使用反射实现这一点,因为有必要知道确切的“流程”。
我打赌那里有一个很酷的工具,可能会被意外使用。当然可能有其他方式。有人有想法吗?谢谢!
答案 0 :(得分:0)
您可以试用Arquillian integration in JBoss Tools。你会找到一些关于如何使用它的信息,in this GitHub repo;请参阅自述文件。那里链接的截屏视频可能很有用。
要开始使用JBoss Tools,您可以使用these instructions通过JBT更新站点将其安装到现有的Eclipse Kepler(e4.3)或更高版本的安装中。
请注意,目前这被认为是实验性的,因此它不包含在JBoss Developer Studio(包装Eclipse和一些插件的发行版)中,并且仅在社区位中可用,即JBoss Tools。如果您在JBoss Tools JIRA中提交任何遇到的问题(或任何新的功能请求),我们将不胜感激(请使用测试工具组件)。