{"id":542,"date":"2016-02-08T10:07:29","date_gmt":"2016-02-08T10:07:29","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?p=542"},"modified":"2020-06-04T10:19:32","modified_gmt":"2020-06-04T10:19:32","slug":"whats-new-in-junit-5","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/","title":{"rendered":"What\u2019s new in JUnit 5?"},"content":{"rendered":"\n<p>If you are a Java developer then chances are high you are using JUnit in your project \u2013 the <a href=\"http:\/\/blog.takipi.com\/we-analyzed-30000-github-projects-here-are-the-top-100-libraries-in-java-js-and-ruby\/\">most popular<\/a> unit testing framework for Java. The current stable version 4.12 is the latest in the JUnit 4 line that was started around 2005 after the introduction of annotations in Java 5. More then ten years later, with Java 8 and lambdas being around, we are facing the next evolutionary step: JUnit 5.<\/p>\n\n\n\n<p>This week, the JUnit 5 team released the first alpha version, asking the community for feedback on the API, missing features and bugs.<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"372\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5-600x372.png\" alt=\"Screenshot Twitter News vom JUnit Team\" class=\"wp-image-546\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5-600x372.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5-768x476.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5-640x396.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png 906w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 600px\" \/><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s new in JUnit 5?<\/h2>\n\n\n\n<p>First of all, JUnit 5 is a complete rewrite and requires Java 8, though it can test Java code that is written in older Java versions. It allows using&nbsp;lambdas in assertions, a feature you might already know from the popular assertion library <a href=\"http:\/\/joel-costigliola.github.io\/assertj\/\">AssertJ<\/a>. Unlike its predecessor, JUnit 5 is not an all-in-one library but instead provides a set of well-structured modules: The API lives in its own module, separated from the engine, the launcher&nbsp;and integration modules for&nbsp;Gradle and Surefire. The JUnit team even launched an initiative called <em><a href=\"https:\/\/github.com\/ota4j-team\/opentest4j\">Open Test Alliance for the JVM<\/a><\/em> to come up with&nbsp;a set of standard exceptions which they hope other testing frameworks as well as IDEs and tools will build upon in the future.<\/p>\n\n\n\n<p>JUnit 5 tests look a lot like JUnit 4 tests: just create a class and add test methods annotated with&nbsp;@Test. However, JUnit 5 provides a completely new set of annotations which resides in a different package than their JUnit 4 counterparts. In addition the assertion methods moved from org.junit.Assert to org.junit.gen5.api.Assertions. Let\u2019s see a simple test class:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    import org.junit.gen5.api.Assertions;\n    import org.junit.gen5.api.Test;\n    public class Test1 {\n      @Test\n      public void test()  {\n        Assertions.assertEquals(3 * 6, 18);\n        Assertions.assertTrue(5 > 4);\n      }\n    }<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Assertions<\/h2>\n\n\n\n<p>The available&nbsp;assertion methods are similiar to JUnit 4. The Assertions class provides assertTrue, assertEquals, assertNull, assertSame and their negative equivalents. What\u2019s new is the overloaded versions of these methods that expect a lambda expression to supply the assertion message or boolean condition. On top of that, there is a new feature called <em>Grouped Assertions<\/em> which allows the execution of a group of assertions and have failures reported together. Remember when you were told not to put multiple assertions into one test to avoid assertions not being executed after a previous failure? That is no longer the case now. Just group the respective assertions together.<\/p>\n\n\n\n<p>Another improvement over JUnit 4 is the way to assert on expected exceptions. Instead of putting the expected exception type into the @Test annotation or wrapping your test code into a try-catch you can use assertThrows and equalsThrows.<\/p>\n\n\n\n<p>Let\u2019s see JUnit 5 assertions in a sample test class:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    public class Test2 {\n      @Test\n      public void lambdaExpressions() {\n        \/\/ lambda expression for condition\n        assertTrue(() -> \"\".isEmpty(), \"string should be empty\");\n        \/\/ lambda expression for assertion message\n        assertEquals(\"foo\", \"foo\", () -> \"message is lazily evaluated\");\n      }\n      @Test\n      public void groupedAssertions() {\n        Dimension dim = new Dimension(800, 600);\n        assertAll(\"dimension\", \n            () -> assertTrue(dim.getWidth() == 800, \"width\"),\n            () -> assertTrue(dim.getHeight() == 600, \"height\"));\n      }\n      @Test\n      public void exceptions() {\n        \/\/ assert exception type\n        assertThrows(RuntimeException.class, () -> {\n          throw new NullPointerException();\n        });\n        \/\/ assert on the expected exception\n        Throwable exception = expectThrows(RuntimeException.class, () -> {\n          throw new NullPointerException(\"should not be null\");\n        });\n        assertEquals(\"should not be null\", exception.getMessage());\n      }\n    }<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Assumptions, tags and disabled tests<\/h2>\n\n\n\n<p>These three features have already been a part of JUnit 4 and are almost the same in JUnit 5. For assumptions, there are some extra methods to allow lambda expressions now. The idea of assumptions is to skip the test execution if the assumption condition is not met. Tags are the equivalent of the experimental Categories in JUnit 4 and can be applied to test classes and methods. This can be used to enable\/disable tests with specific tags in a build. In order to disable tests in your test code use the @Disabled annotation which is equivalent to @Ignore in JUnit 4.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    public class Test3 {\n      @Test\n      @Disabled\n      public void disabledTest() {    \n        \/\/ ...  \n      }\n      @Test\n      @Tag(\"jenkins\")\n      public void jenkinsOnly() {\n        \/\/ ...\n      }\n      \n      @Test\n      public void windowsOnly() {\n        Assumptions.assumeTrue(System.getenv(\"OS\").startsWith(\"Windows\"));\n        \/\/ ...\n      }\n    }<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Extension model<\/h2>\n\n\n\n<p>JUnit 5 provides a new extension API that supersedes the previous @RunWith and @Rule extension mechanism. While JUnit 4 test classes were limited to only one Runner, the new extension model allows the&nbsp;registration of multiple extensions for a class or even a method.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    @ExtendWith(MockitoExtension.class)\n    @ExtendWith(CdiUnitExtension.class)\n    public class Test4 {\n      @Test\n      @DisplayName(\"awesome test\")\n      void dependencyInjection(TestInfo testInfo) {\n        assertEquals(\"awesome test\", testInfo.getDisplayName());\n      }\n    }<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>There are built-in extensions in JUnit 5 that allow for method-level dependency injection. Without going into details here, I put an example in the above code sample that injects a TestInfo instance into the method.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Can I use Hamcrest Matchers or AssertJ with JUnit 5?<\/h2>\n\n\n\n<p>Yes, you can. Just use the assertion methods provided by Hamcrest and AssertJ instead of the JUnit 5 methods. Be aware that there is no direct support for Hamcrest matchers anymore as in JUnit 4\u2019s assertThat method.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    public class Test5 {\n      @Test\n      public void emptyString() {\n        \/\/ JUnit 5\n        org.junit.gen5.api.Assertions.assertTrue(\"\".isEmpty());\n        \n        \/\/ AssertJ\n        org.assertj.core.api.Assertions.assertThat(\"\").isEmpty();\n        \n        \/\/ Hamcrest\n        org.hamcrest.MatcherAssert.assertThat(\"\", isEmptyString());\n      }\n    }<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s next?<\/h2>\n\n\n\n<p>There is no roadmap on the project\u2019s <a href=\"https:\/\/github.com\/junit-team\/junit5\">GitHub page<\/a>. JUnit 5 is alpha now, feel free to test it and give your feedback. The team has built integration modules for Gradle and Maven Surefire. If you would like to run JUnit 5 tests in your IDE you can use the JUnit 4 Runner. Once the JUnit 5 API is stable, IDE and tool vendors are supposed to provide direct integration. It will also be interesting to see if the common exception API that has been extracted by the <em>Open Testing Alliance for the JVM<\/em> will be adapted by other testing frameworks.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you are a Java developer then chances are high you are using JUnit in your project &#8211; the most popular unit testing framework for Java.<\/p>\n","protected":false},"author":82,"featured_media":546,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[12],"tags":[275,276,277],"topics":[],"class_list":["post-542","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-junit-5","tag-java","tag-testing-framework"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What\u2019s new in JUnit 5? - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"If you are a Java developer then chances are high you are using JUnit in your project - the most popular unit testing framework for Java.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What\u2019s new in JUnit 5? - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"If you are a Java developer then chances are high you are using JUnit in your project - the most popular unit testing framework for Java.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-08T10:07:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-04T10:19:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png\" \/>\n\t<meta property=\"og:image:width\" content=\"906\" \/>\n\t<meta property=\"og:image:height\" content=\"561\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Stefan Bley\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stefan Bley\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/\",\"name\":\"What\u2019s new in JUnit 5? - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png\",\"datePublished\":\"2016-02-08T10:07:29+00:00\",\"dateModified\":\"2020-06-04T10:19:32+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0\"},\"description\":\"If you are a Java developer then chances are high you are using JUnit in your project - the most popular unit testing framework for Java.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png\",\"width\":906,\"height\":561},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What\u2019s new in JUnit 5?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0\",\"name\":\"Stefan Bley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg\",\"caption\":\"Stefan Bley\"},\"description\":\"Stefan works as a Senior Software Engineer at ZEISS Digital Innovation in Berlin and has been involved in various Java Enterprise and Angular projects. He loves experimenting with technology and shares his knowledge by speaking at conferences and community events. Currently, he is interested in blockchain and distributed ledger technologies.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstefanbley\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What\u2019s new in JUnit 5? - ZEISS Digital Innovation Blog","description":"If you are a Java developer then chances are high you are using JUnit in your project - the most popular unit testing framework for Java.","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:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/","og_locale":"en_US","og_type":"article","og_title":"What\u2019s new in JUnit 5? - ZEISS Digital Innovation Blog","og_description":"If you are a Java developer then chances are high you are using JUnit in your project - the most popular unit testing framework for Java.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/","og_site_name":"Digital Innovation Blog","article_published_time":"2016-02-08T10:07:29+00:00","article_modified_time":"2020-06-04T10:19:32+00:00","og_image":[{"width":906,"height":561,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png","type":"image\/png"}],"author":"Stefan Bley","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Stefan Bley","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/","name":"What\u2019s new in JUnit 5? - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png","datePublished":"2016-02-08T10:07:29+00:00","dateModified":"2020-06-04T10:19:32+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0"},"description":"If you are a Java developer then chances are high you are using JUnit in your project - the most popular unit testing framework for Java.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5.png","width":906,"height":561},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/whats-new-in-junit-5\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/"},{"@type":"ListItem","position":2,"name":"What\u2019s new in JUnit 5?"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0","name":"Stefan Bley","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg","caption":"Stefan Bley"},"description":"Stefan works as a Senior Software Engineer at ZEISS Digital Innovation in Berlin and has been involved in various Java Enterprise and Angular projects. He loves experimenting with technology and shares his knowledge by speaking at conferences and community events. Currently, he is interested in blockchain and distributed ledger technologies.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstefanbley\/"}]}},"author_meta":{"display_name":"Stefan Bley","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstefanbley\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/06\/201602_Whats_new_in-JUnit_5-600x372.png","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/java\/\" class=\"advgb-post-tax-term\">Java<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Java<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/java\/\" class=\"advgb-post-tax-term\">JUnit 5<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/java\/\" class=\"advgb-post-tax-term\">Java<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/java\/\" class=\"advgb-post-tax-term\">testing framework<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">JUnit 5<\/span>","<span class=\"advgb-post-tax-term\">Java<\/span>","<span class=\"advgb-post-tax-term\">testing framework<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 10 years ago","modified":"Updated 6 years ago"},"absolute_dates":{"created":"Posted on February 8, 2016","modified":"Updated on June 4, 2020"},"absolute_dates_time":{"created":"Posted on February 8, 2016 10:07 am","modified":"Updated on June 4, 2020 10:19 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/users\/82"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/comments?post=542"}],"version-history":[{"count":3,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/542\/revisions"}],"predecessor-version":[{"id":547,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/542\/revisions\/547"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media\/546"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media?parent=542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/categories?post=542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/tags?post=542"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/topics?post=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}