网站建设功能模块价格,wordpress淘宝客跳转,宁夏网站推广,蓝天使网站建设推广当我需要进行原型设计#xff0c;概念验证或在空闲时间使用一些新技术时#xff0c;开始新项目对于Maven来说总是有点烦人。 不得不说#xff0c;设置Maven项目并不难#xff0c;您可以使用Maven原型。 但是原型通常是过时的。 谁想玩旧技术#xff1f; 因此#xff0c;我… 当我需要进行原型设计概念验证或在空闲时间使用一些新技术时开始新项目对于Maven来说总是有点烦人。 不得不说设置Maven项目并不难您可以使用Maven原型。 但是原型通常是过时的。 谁想玩旧技术 因此我总是以自己想玩的依赖关系为最终结局。 花费的时间不是很有效。 但是比起Spring Boot来了我的方式。 我恋爱了。 在过去的几个月中我至少创建了50个小型操场项目并使用Spring Boot制作了原型。 在工作中也将其合并。 它非常适合原型学习微服务Web批处理企业消息流或命令行应用程序。 您必须是恐龙或是盲目不去为下一个Spring项目评估Spring Boot。 当您完成评估后便会继续努力。 我承诺。 我觉得有必要强调一下Spring Boot微服务的黑匣子测试有多么容易。 黑匣子测试指的是无需戳入任何应用程序工件的测试。 这种测试也可以称为集成测试。 您还可以执行性能或压力测试方式以进行演示。 Spring Boot Microservice通常是带有嵌入式Tomcat的Web应用程序。 因此它从命令行作为JAR执行。 可以将Spring Boot项目转换为WAR工件该工件可以托管在共享Servlet容器中 。 但是我们现在不想要那样。 当微服务拥有自己的嵌入式容器时效果会更好。 我使用现有的Spring REST服务指南作为测试目标。 重点主要放在测试项目上因此以“ Hello World” REST应用程序为例很方便。 我希望在您的计算机上设置并安装以下两个常用工具 Maven 3 吉特 因此我们需要下载源代码并将JAR工件安装到我们的本地存储库中。 我将使用命令行下载并安装微服务。 让我们进入下载源代码的目录。 使用以下命令 git clone gitgithub.com:spring-guides/gs-rest-service.git
cd gs-rest-service/complete
mvn clean install 如果一切顺利那么现在将Spring Boot微服务JAR工件安装在我们的本地Maven存储库中。 在认真的Java开发中宁愿将其安装到共享存储库中例如ArtifactoryNexus等。 安装我们的微服务后我们可以专注于测试项目。 它也是基于Maven和Spring Boot的。 黑匣子测试将通过从Maven存储库下载工件来实现无论它是本地的还是远程的都无所谓。 Maven依赖插件可以通过以下方式帮助我们 plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-dependency-plugin/artifactIdexecutionsexecutionidcopy-dependencies/idphasecompile/phasegoalsgoalcopy-dependencies/goal/goalsconfigurationincludeArtifactIdsgs-rest-service/includeArtifactIdsstripVersiontrue/stripVersion/configuration/execution/executions
/plugin 默认情况下它将微服务工件下载到target/dependency目录。 如您所见它已挂接到Maven生命周期的compile阶段因此在test阶段可以使用下载的工件。 从版本信息中删除了工件版本。 我们使用最新版本。 它使测试过程中JAR工件的使用更加容易。 精通Maven的读者可能会注意到缺少插件版本。 Spring Boot驱动的项目继承自名为spring-boot-starter-parent父Maven项目。 。 它包含主要Maven插件的版本。 这是Spring Boot的自以为是的方面之一。 我喜欢它因为它提供了稳定的依赖关系矩阵。 您可以根据需要更改版本。 当文件系统中有工件时就可以开始测试。 我们需要能够从命令行执行JAR文件。 我通过这种方式使用标准的Java ProcessBuilder public class ProcessExecutor {public Process execute(String jarName) throws IOException {Process p null;ProcessBuilder pb new ProcessBuilder(java, -jar, jarName);pb.directory(new File(target/dependency));File log new File(log);pb.redirectErrorStream(true);pb.redirectOutput(Redirect.appendTo(log));p pb.start();return p;}
} 此类基于给定的文件名执行给定的进程JAR。 位置被硬编码到target/dependency目录中其中maven-dependency-plugin定位了我们的工件。 标准和错误输出将重定向到文件。 测试所需的下一个类是DTO数据传输对象。 这是简单的POJO将用于从JSON反序列化。 我使用Lombok项目来减少gettersetterhashCode和equals所需的样板代码。 Data
AllArgsConstructor
NoArgsConstructor
public class Greeting {private long id;private String content;
} 测试本身如下所示 public class BlackBoxTest {private static final String RESOURCE_URL http://localhost:8080/greeting;Testpublic void contextLoads() throws InterruptedException, IOException {Process process null;Greeting actualGreeting null;try {process new ProcessExecutor().execute(gs-rest-service.jar);RestTemplate restTemplate new RestTemplate();waitForStart(restTemplate);actualGreeting restTemplate.getForObject(RESOURCE_URL, Greeting.class);} finally {process.destroyForcibly();}Assert.assertEquals(new Greeting(2L, Hello, World!), actualGreeting);}private void waitForStart(RestTemplate restTemplate) {while (true) {try {Thread.sleep(500);restTemplate.getForObject(RESOURCE_URL, String.class);return;} catch (Throwable throwable) {// ignoring errors}}}
} 它首先执行Spring Boot微服务进程然后等待它启动。 要验证微服务是否已启动它将HTTP请求发送到期望的URL。 首次成功响应后该服务即可进行测试。 微服务应为HTTP GET请求发送简单的问候语JSON响应。 在测试结束时已验证了从JSON到我们的Greeting DTO的反序列化。 源代码在Github上共享 。 翻译自: https://www.javacodegeeks.com/2014/12/black-box-testing-of-spring-boot-microservice-is-so-easy.html