{"id":98208,"date":"2019-09-14T15:15:32","date_gmt":"2019-09-14T12:15:32","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=98208"},"modified":"2019-09-12T14:00:10","modified_gmt":"2019-09-12T11:00:10","slug":"thoughts-on-efficient-enterprise-testing","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html","title":{"rendered":"Thoughts on efficient enterprise testing (1\/6)"},"content":{"rendered":"<p>Testing in the enterprise is still a topic that is not as extensively used as it should be. Writing and especially maintaining tests takes times and effort, however, cutting short on software tests can\u2019t be the solution. Which scopes, approaches, and test technology should be pursue in order to make testing more efficient?<\/p>\n<p>I\u2019ve put together a series with my experiences and opinions on enterprise testing, based on many real-world projects. Especially for applications that are considerably more complex then \u201chello world\u201d, it becomes paramount which approaches to follow. I\u2019ll mostly focus on testing the functional behavior of our applications, that is how well they fulfill our business logic. In the following I\u2019ll explain best practices on how to make testing more efficient, for different scopes and with different approaches:<\/p>\n<ul class=\"wp-block-list\">\n<li>Ideas &amp; constraints<\/li>\n<li>Unit tests<\/li>\n<li><em>Use case<\/em> tests<\/li>\n<li>Code-level integration tests<\/li>\n<li>System tests<\/li>\n<li>Development workflows &amp; pipelines<\/li>\n<li>Test code quality &amp; maintainable tests<\/li>\n<li>Test frameworks &amp; technology<\/li>\n<\/ul>\n<p><strong>Introduction<\/strong><\/p>\n<p>Regardless of the different types and scopes of tests, the point of having a test suite is to verify that our applications will work as expected in production. This should be the main motivation to verify whether the system, viewed from a user\u2019s perspective, does its job.<\/p>\n<p>Since human attention spans and context switches are a thing, we need to make sure that our tests run and verify fast, and with predictable results. While writing code, a quick verification, quick as in less or equal to one second, is crucial to ensure a highly productive workflow and that we don\u2019t get distracted.<\/p>\n<p>On a different note, we need to ensure that tests stay maintainable. Software changes very often and with a sufficient functional test coverage, every functional change in the production code will require change in the test scope. Ideally, the test code only changes when the functionality i.e. the business logic changes, and not for code clean-ups and refactorings. In general, the test scenarios need to make non-functional, structural changes possible.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>When we look into different test scopes, which we will at more detail, the question arises which scopes to spend more time and effort on. For microservice applications, or any system where we have a significant amount of distribution and integration, integrative tests that verify the system boundaries become more important. Therefore, we need an effective way to verify the overall application during our local development, while keeping the application environment and setup as similar to production as possible.<\/p>\n<p><strong>Principles &amp; constraints<\/strong><\/p>\n<p>Regardless of the chosen solutions, let\u2019s define the following principles and constraints for our test suite:<\/p>\n<ul class=\"wp-block-list\">\n<li>Tests need to execute and verify fast, and provide fast feedback. For unit tests without any further integration, we should be able to run hundreds of tests within a single second. For integrative tests, the execution time depends on the scenario, which ideally doesn\u2019t exceed one second.<\/li>\n<li>During development, the tests must provide fast feedback, also on an integrative level. This requires that the test context starts up quickly, or keeps running while we\u2019re writing code. Thus, it should be possible to build up an effective development cycle with redeploy and test turnaround times with less than five seconds.<\/li>\n<li>Tests need to make it able to refactor the production code without significant change in the test scope. Code changes that don\u2019t change the functional behavior of the application should only result in minimal test code changes.<\/li>\n<li>Code changes that do change the functional behavior should equally result in limited test code changes. As an example: \u201cHow much effort is it to swap the HTTP boundaries to gRPC, to swap JSON to something else, to even swap the enterprise framework, etc.?\u201d.<\/li>\n<li>The test technology and approach needs to be compatible with crafting proper abstraction, delegation, and code quality, tailored to our business requirements. We need to be able to craft expressive APIs, extend potential DSLs, and to craft the correct abstractions.<\/li>\n<li>The test technology needs to support a \u201cdevelopment mode\u201d, that is running the application in a way that enables instant changes and redeploys in an integrated environment, for example \u201cdev\u201d and debug modes of servers, <a rel=\"noopener noreferrer\" href=\"https:\/\/quarkus.io\/\" target=\"_blank\">Quarkus&#8217;<\/a> dev mode, <a rel=\"noopener noreferrer\" href=\"https:\/\/www.telepresence.io\/\" target=\"_blank\">Telepresence<\/a>, <a href=\"https:\/\/www.javacodegeeks.com\/2019\/08\/minimize-turnaround-times-open-libertys-dev-mode.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">watch-and-deploy approaches<\/a>, and others.<\/li>\n<li>The testing approach needs to be compatible with setting up development and test life cycle individually. That is, the developers must be able to setup and configure their local environment outside of the test life cycle, for example using shell scripts, and then quickly run the test scenarios against an already set-up environment. For reasons of flexibility and reusability, the individual test cases should not manage the life cycle of the test setup.<\/li>\n<li>We need to be able to reuse test scenarios for multiple scopes, for example defining the business scenario once and reusing the setup for system tests, load test, running either locally or against an externally deployed environment. It should be simple to copy the scenarios, that should only consist of a few lines of code, for a different purpose by using a different implementation.<\/li>\n<\/ul>\n<p>In the <a href=\"https:\/\/blog.sebastian-daschner.com\/entries\/thoughts-on-efficient-testing-unit\">next part<\/a> of the series we will have a look at code-level unit tests and <em>component<\/em> or <em>use case<\/em> tests and how they match these principles and constraints.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Sebastian Daschner, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/blog.sebastian-daschner.com\/entries\/thoughts-on-efficient-testing\" target=\"_blank\" rel=\"noopener noreferrer\">Thoughts on efficient enterprise testing (1\/6)<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Testing in the enterprise is still a topic that is not as extensively used as it should be. Writing and especially maintaining tests takes times and effort, however, cutting short on software tests can\u2019t be the solution. Which scopes, approaches, and test technology should be pursue in order to make testing more efficient? I\u2019ve put &hellip;<\/p>\n","protected":false},"author":7568,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[273],"class_list":["post-98208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Thoughts on efficient enterprise testing (1\/6) - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about testing? Check our article presenting some thoughts on how you can achieve efficient enterprise testing\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Thoughts on efficient enterprise testing (1\/6) - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about testing? Check our article presenting some thoughts on how you can achieve efficient enterprise testing\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-14T12:15:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sebastian Daschner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DaschnerS\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Daschner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html\"},\"author\":{\"name\":\"Sebastian Daschner\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/c0cd4930fe5f0a7be847ee87863ea665\"},\"headline\":\"Thoughts on efficient enterprise testing (1\\\/6)\",\"datePublished\":\"2019-09-14T12:15:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html\"},\"wordCount\":909,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"Testing\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html\",\"name\":\"Thoughts on efficient enterprise testing (1\\\/6) - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2019-09-14T12:15:32+00:00\",\"description\":\"Interested to learn about testing? Check our article presenting some thoughts on how you can achieve efficient enterprise testing\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/thoughts-on-efficient-enterprise-testing.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Thoughts on efficient enterprise testing (1\\\/6)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/c0cd4930fe5f0a7be847ee87863ea665\",\"name\":\"Sebastian Daschner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5f7cd4d32ab6265242b5c9fdb10e6be68a6a583d8863f746fd9852b8149bbd9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5f7cd4d32ab6265242b5c9fdb10e6be68a6a583d8863f746fd9852b8149bbd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5f7cd4d32ab6265242b5c9fdb10e6be68a6a583d8863f746fd9852b8149bbd9?s=96&d=mm&r=g\",\"caption\":\"Sebastian Daschner\"},\"description\":\"Sebastian Daschner is a self-employed Java consultant and trainer. He is the author of the book 'Architecting Modern Java EE Applications'. Sebastian is a Java Champion, Oracle Developer Champion and JavaOne Rockstar.\",\"sameAs\":[\"https:\\\/\\\/blog.sebastian-daschner.com\\\/\",\"https:\\\/\\\/x.com\\\/DaschnerS\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/sebastian-daschner\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Thoughts on efficient enterprise testing (1\/6) - Java Code Geeks","description":"Interested to learn about testing? Check our article presenting some thoughts on how you can achieve efficient enterprise testing","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html","og_locale":"en_US","og_type":"article","og_title":"Thoughts on efficient enterprise testing (1\/6) - Java Code Geeks","og_description":"Interested to learn about testing? Check our article presenting some thoughts on how you can achieve efficient enterprise testing","og_url":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-09-14T12:15:32+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Sebastian Daschner","twitter_card":"summary_large_image","twitter_creator":"@DaschnerS","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Sebastian Daschner","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html"},"author":{"name":"Sebastian Daschner","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/c0cd4930fe5f0a7be847ee87863ea665"},"headline":"Thoughts on efficient enterprise testing (1\/6)","datePublished":"2019-09-14T12:15:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html"},"wordCount":909,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["Testing"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html","url":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html","name":"Thoughts on efficient enterprise testing (1\/6) - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2019-09-14T12:15:32+00:00","description":"Interested to learn about testing? Check our article presenting some thoughts on how you can achieve efficient enterprise testing","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/thoughts-on-efficient-enterprise-testing.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Thoughts on efficient enterprise testing (1\/6)"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/c0cd4930fe5f0a7be847ee87863ea665","name":"Sebastian Daschner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c5f7cd4d32ab6265242b5c9fdb10e6be68a6a583d8863f746fd9852b8149bbd9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5f7cd4d32ab6265242b5c9fdb10e6be68a6a583d8863f746fd9852b8149bbd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5f7cd4d32ab6265242b5c9fdb10e6be68a6a583d8863f746fd9852b8149bbd9?s=96&d=mm&r=g","caption":"Sebastian Daschner"},"description":"Sebastian Daschner is a self-employed Java consultant and trainer. He is the author of the book 'Architecting Modern Java EE Applications'. Sebastian is a Java Champion, Oracle Developer Champion and JavaOne Rockstar.","sameAs":["https:\/\/blog.sebastian-daschner.com\/","https:\/\/x.com\/DaschnerS"],"url":"https:\/\/www.javacodegeeks.com\/author\/sebastian-daschner"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/98208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/7568"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=98208"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/98208\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=98208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=98208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=98208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}