{"id":11206,"date":"2013-04-14T15:00:14","date_gmt":"2013-04-14T12:00:14","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=11206"},"modified":"2013-04-12T07:15:10","modified_gmt":"2013-04-12T04:15:10","slug":"running-junit-tests-repeatedly-without-loops","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html","title":{"rendered":"Running JUnit Tests Repeatedly Without Loops"},"content":{"rendered":"<p>Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of possibilities <sup><a href=\"#fn-2899-1\">1<\/a><\/sup>. More precisely if you assume a signature that looks like<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n<pre class=\" brush:java\">interface RandomRangeValueCalculator {\r\n  long calculateRangeValue( long center, long radius );\r\n}<\/pre>\n<p>a test might verify the following<sup><a href=\"#fn-2899-2\">2<\/a><\/sup>:<\/p>\n<pre class=\" brush:java\">public class RandomRangeValueCalculatorImplTest {\r\n\r\n  @Test\r\n  public void testCalculateRangeValue() {\r\n    long center = [...];\r\n    long radius = [...];\r\n    RangeValueCalculator calculator = [...];\r\n\r\n    long actual = calculator.calculateRangeValue( center, radius );\r\n\r\n    assertTrue( center + radius &gt;= actual );\r\n    assertTrue( center - radius &lt;= actual );\r\n  }\r\n}<\/pre>\n<p>However calculating range values for the same center and radius multiple times will return different results (at least most of the time). Therefore the solution seemed somewhat brittle in a sense that a poor implementation might easily produce intermittent failures. On the other hand I did not want to descend into the depths of actually messuring the value distribution. The latter (random, gaussian or the like) was provided by a collaborator and its proper usage was already confirmed by additional tests.<\/p>\n<p>It occurred to me that a more pragmatic solution could be to actually run the test above automatically over and over again to make it more \u2018significant\u2019. Of course the easiest way to achieve this would be to put the test\u2019s content into a loop and go on living.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>But for a start it looked somewhat wrong having the asserts within a loop and mixing two aspects into one test run. And even more important the covered problem domain required more tests of the kind. So given the intent of reducing redundancy I remembered my post about <a title=\"JUnit Rules\" href=\"http:\/\/www.codeaffine.com\/2012\/09\/24\/junit-rules\/\" target=\"_blank\">JUnit-Rules<\/a> and implemented a simple repeat rule<sup><a href=\"#fn-2899-3\">3<\/a><\/sup>. With this rule in place the test above could be gently amended to:<\/p>\n<pre class=\" brush:java\">public class RandomRangeValueCalculatorImplTest {\r\n\r\n  @Rule\r\n  public RepeatRule repeatRule = new RepeatRule();\r\n\r\n  @Test\r\n  @Repeat( times = 10000 )\r\n  public void testCalculateRangeValue() {\r\n    long center = [...];\r\n    long radius = [...];\r\n    RangeValueCalculator calculator = [...];\r\n\r\n    long actual= calculator.calculateRangeValue( center, radius );\r\n\r\n    assertTrue( center + radius &gt;= actual );\r\n    assertTrue( center - radius &lt;= actual );\r\n  }\r\n}<\/pre>\n<p>I think it is quite easy to understand that the <code>testCalculateRangeValue<\/code> method will be executed 10000 times while running the test case. The following snippet shows the implementation of the RepeatRule, which is straight forward:<\/p>\n<pre class=\" brush:java\">public class RepeatRule implements TestRule {\r\n\r\n  @Retention( RetentionPolicy.RUNTIME )\r\n  @Target( {\r\n    java.lang.annotation.ElementType.METHOD\r\n  } )\r\n  public @interface Repeat {\r\n    public abstract int times();\r\n  }\r\n\r\n  private static class RepeatStatement extends Statement {\r\n\r\n    private final int times;\r\n    private final Statement statement;\r\n\r\n    private RepeatStatement( int times, Statement statement ) {\r\n      this.times = times;\r\n      this.statement = statement;\r\n    }\r\n\r\n    @Override\r\n    public void evaluate() throws Throwable {\r\n      for( int i = 0; i &lt; times; i++ ) {\r\n        statement.evaluate();\r\n      }\r\n    }\r\n  }\r\n\r\n  @Override\r\n  public Statement apply(\r\n    Statement statement, Description description )\r\n  {\r\n    Statement result = statement;\r\n    Repeat repeat = description.getAnnotation( Repeat.class );\r\n    if( repeat != null ) {\r\n      int times = repeat.times();\r\n      result = new RepeatStatement( times, statement );\r\n    }\r\n    return result;\r\n  }\r\n}<\/pre>\n<p>So far the RepeatRule serves it purpose and the system functionalities based on the mentioned implementation is working like a charm. Nevertheless sometimes someone misses the forest for the trees and so I thought it might be a good idea to share this solution to see what other people come up with.<\/p>\n<ol>\n<li>Actually this was only one part of the problem domain but I consider it as a sufficient motivation for this post. <a href=\"#fnref-2899-1\">\u21a9<\/a><\/li>\n<li>Formalistically spoken: f(n,m)\u2208{e|e\u2265n-m\u2227e\u2264n+m}, for all e,n,m \u2208 \u2115 <a href=\"#fnref-2899-2\">\u21a9<\/a><\/li>\n<li>A short google search only came up with a similar solution available in <a title=\"Spring Framework\" href=\"http:\/\/www.springsource.org\/\" target=\"_blank\">Spring<\/a>, which was not available in my set of libraries. <a href=\"#fnref-2899-3\">\u21a9<\/a><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/www.codeaffine.com\/2013\/04\/10\/running-junit-tests-repeatedly-without-loops\/\">Running JUnit Tests Repeatedly Without Loops<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Frank Appel at the <a href=\"http:\/\/www.codeaffine.com\/\">Code Affine<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of possibilities 1. More precisely if you assume a signature that looks like &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; interface RandomRangeValueCalculator { long calculateRangeValue( long center, long radius ); &hellip;<\/p>\n","protected":false},"author":336,"featured_media":176,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[274,273],"class_list":["post-11206","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-junit","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Running JUnit Tests Repeatedly Without Loops<\/title>\n<meta name=\"description\" content=\"Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of\" \/>\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\/2013\/04\/running-junit-tests-repeatedly-without-loops.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Running JUnit Tests Repeatedly Without Loops\" \/>\n<meta property=\"og:description\" content=\"Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.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=\"2013-04-14T12:00:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.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=\"Frank Appel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Frank Appel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html\"},\"author\":{\"name\":\"Frank Appel\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/ff5a13a51eb4394c29d6442242d3689c\"},\"headline\":\"Running JUnit Tests Repeatedly Without Loops\",\"datePublished\":\"2013-04-14T12:00:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html\"},\"wordCount\":419,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"keywords\":[\"JUnit\",\"Testing\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html\",\"name\":\"Running JUnit Tests Repeatedly Without Loops\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"datePublished\":\"2013-04-14T12:00:14+00:00\",\"description\":\"Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/running-junit-tests-repeatedly-without-loops.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\":\"Running JUnit Tests Repeatedly Without Loops\"}]},{\"@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\\\/ff5a13a51eb4394c29d6442242d3689c\",\"name\":\"Frank Appel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9ea88be0ddf77d1d9ca0bd16528b136e6d56f2b6f6577c93cae14f3e683cf57a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9ea88be0ddf77d1d9ca0bd16528b136e6d56f2b6f6577c93cae14f3e683cf57a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9ea88be0ddf77d1d9ca0bd16528b136e6d56f2b6f6577c93cae14f3e683cf57a?s=96&d=mm&r=g\",\"caption\":\"Frank Appel\"},\"sameAs\":[\"http:\\\/\\\/www.codeaffine.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/frank-appel\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Running JUnit Tests Repeatedly Without Loops","description":"Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of","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\/2013\/04\/running-junit-tests-repeatedly-without-loops.html","og_locale":"en_US","og_type":"article","og_title":"Running JUnit Tests Repeatedly Without Loops","og_description":"Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of","og_url":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-04-14T12:00:14+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","type":"image\/jpeg"}],"author":"Frank Appel","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Frank Appel","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html"},"author":{"name":"Frank Appel","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/ff5a13a51eb4394c29d6442242d3689c"},"headline":"Running JUnit Tests Repeatedly Without Loops","datePublished":"2013-04-14T12:00:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html"},"wordCount":419,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","keywords":["JUnit","Testing"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html","url":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html","name":"Running JUnit Tests Repeatedly Without Loops","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","datePublished":"2013-04-14T12:00:14+00:00","description":"Recently I came across a problem where I had to write tests for a method that calculates randomly distributed values within a certain range of","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/running-junit-tests-repeatedly-without-loops.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":"Running JUnit Tests Repeatedly Without Loops"}]},{"@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\/ff5a13a51eb4394c29d6442242d3689c","name":"Frank Appel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9ea88be0ddf77d1d9ca0bd16528b136e6d56f2b6f6577c93cae14f3e683cf57a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9ea88be0ddf77d1d9ca0bd16528b136e6d56f2b6f6577c93cae14f3e683cf57a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9ea88be0ddf77d1d9ca0bd16528b136e6d56f2b6f6577c93cae14f3e683cf57a?s=96&d=mm&r=g","caption":"Frank Appel"},"sameAs":["http:\/\/www.codeaffine.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/frank-appel"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/11206","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\/336"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=11206"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/11206\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/176"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=11206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=11206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=11206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}