太原网站建设解决方案,汽车网站建设预算,科技核心期刊,珠海seo海网站建设最近#xff0c;我有机会使用由我亲爱的Holger Staudacher编写的OSGi-JAX-RS-Connector库。 通过连接器#xff0c;您可以通过将Path注释的类型注册为OSGi服务来轻松发布资源-实际上#xff0c;它工作得很好。 对于我来说#xff0c;使用普通的JUnit测试编写驱动的服务类测… 最近我有机会使用由我亲爱的Holger Staudacher编写的OSGi-JAX-RS-Connector库。 通过连接器您可以通过将Path注释的类型注册为OSGi服务来轻松发布资源-实际上它工作得很好。 对于我来说使用普通的JUnit测试编写驱动的服务类测试是很自然的事但提供附加的集成测试也很重要。 这些测试允许检查此类服务的运行时可用性和功能。 为了提供后者我使用了Holger编写的另一个小助手– restfuse 它是用于自动HTTP / REST测试的JUnit扩展。 该场景看起来像这样 服务 Path( /message )
public class SampleService {GETProduces( MediaType.TEXT_PLAIN )public String getMessage() {return Hello World;}
} 一个JUnit测试用例 public class SampleServiceTest {Testpublic void testGetMessage() {SampleService service new SampleService();String message service.getMessage();assertEquals( Hello World, message );}
} 服务注册 ?xml version1.0 encodingUTF-8?
scr:componentxmlns:scrhttp://www.osgi.org/xmlns/scr/v1.1.0nameSampleServiceimplementation classsample.SampleService/serviceprovide interfacesample.SampleService//service
/scr:component Restfuse集成测试 RunWith( HttpJUnitRunner.class )
public class SampleServiceHttpTest {Rulepublic Destination destination new Destination( http://localhost:9092 );Contextprivate Response response;HttpTest( method Method.GET, path /services/message )public void checkMessage() {String body response.getBody( String.class );assertOk( response );assertEquals( MediaType.TEXT_PLAIN, response.getType() );assertEquals( HelloWorld, body );}
} 正在运行的服务 尽管所有这些工作都非常简单但是它以某种方式使我感到困惑即在我能够执行集成测试之前首先要在本地运行集成测试才能启动服务器。 由于忙于手头的任务我经常忘记启动服务器遇到连接超时等问题。 但是我通过使用PDE JUnit启动配置找到了解决方案因为可以在运行测试的过程中将这样的配置设置为启动服务器。 为此创建并选择一个包含所有要运行1的集成测试的测试套件。 …之后切换到主标签并选择无头模式... …最后但并非最不重要的一点是配置服务器使用的程序参数在我们的案例中该参数主要涉及端口定义。 “插件”选项卡中的捆绑软件选择包含与用于独立运行服务器的osgi启动配置相同的捆绑软件以及JUnitPDE JUnitrestfuse捆绑软件及其依赖项。 所选的测试套件可能如下所示 RunWith( Suite.class )
SuiteClasses( {SampleServiceHttpTest.class
} )
public class AllRestApiIntegrationTestSuite {public static String BASE_URL http://localhost: System.getProperty( org.osgi.service.http.port );
} 唯一不寻常的是BASE_URL常量定义。 如上所述测试运行的服务器端口在启动配置中指定为程序参数。 但是Restfuse测试需要在目标规则定义期间提供端口。 使用上述方法可以在不影响测试的情况下更改配置中的端口。 只需将常量用作定义中的参数如下面的代码段2 3所示 。 Rulepublic Destination destination new Destination( BASE_URL ); 这个简单的设置效果很好并改善了我在本地运行集成测试的工作流程。 将启动配置保存在共享项目中后您的团队成员就可以轻松地重用启动配置。 今天就这样反馈一如既往地受到高度赞赏。 顺便说一句霍尔格答应我写一篇文章介绍如何将上述内容集成到基于Maven / tycho的版本4中 -请继续关注 当然您也可以使用运行选定项目程序包或源文件夹的所有测试的可能性但是出于我们的目的使用套件方法并运行单个测试用例是可以的 在现实世界中您可能会为常量定义提供一个单独的类以避免将测试耦合到套件。 为了简化起见我在这里略过。 请注意使用静态导入包含BASE_URL以提高代码段的可读性 Holger信守诺言请参阅 http : //eclipsesource.com/blogs/2012/09/11/running-httprest-integration-tests-in-an-eclipse-tycho-build/ 参考来自JCG合作伙伴 Frank Appel的Code Affine博客在Eclipse中有效地运行HTTP / REST集成测试 。 翻译自: https://www.javacodegeeks.com/2012/11/running-httprest-integration-tests-efficiently-in-eclipse.html