{"id":1887,"date":"2020-07-29T10:15:42","date_gmt":"2020-07-29T08:15:42","guid":{"rendered":"http:\/\/web.evertop.pl\/how-to-prepare-test-data-for-unit-test\/"},"modified":"2020-10-23T20:58:52","modified_gmt":"2020-10-23T18:58:52","slug":"how-to-prepare-test-data-for-unit-test","status":"publish","type":"post","link":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/","title":{"rendered":"How To Prepare Test Data For Unit Test"},"content":{"rendered":"<p>There are many articles describing how to write a good test. But the question is how to create a good data test? I will show an example, different from what you may have ever read. A few months ago, I developed a module for checking if the weight of a set of vehicles is too high or not. The module has been prepared according to the Polish law. Subsequent paragraphs define several dozen cases. The set of vehicles can be treated as one entity or each of them separately.<\/p>\n<p>The very first decision was to assume whether each paragraph act should be a separate rule (block) in a code. Because there are plenty of rules, I decided to create a specific response class. This could tell if a paragraph is fulfilled or not:<\/p>\n<pre>public class Info\r\n{\r\n        public string Paragraph { get; set; }\r\n        public decimal CurrentValue { get; set; }\r\n        public decimal Limit { get; set; }\r\n        public int? AxisNumber { get; set; }\r\n        public bool IsValid =&gt; CurrentValue &lt;= Limit;\r\nprivate Info(string paragraph)\r\n        {\r\n            Paragraph = paragraph;\r\n        }\r\npublic static Info Paragraph(string paragraph)\r\n        {\r\n            return new Info (paragraph);\r\n        }\r\n}<\/pre>\n<h2>Algorithm preparation<\/h2>\n<p>Now I was able to return with information about which rule is exceeded or not. What is the limit for the current rule? What is the current weight of a set of vehicles or axis pressure? If it is possible which axis is exceeded? Now I was ready to collect all the rules and relevant factors. It could be described with the following questions:<\/p>\n<div aria-hidden=\"true\"><\/div>\n<ul>\n<li>Is it a car and a trailer or a tractor and a semi-trailer?<\/li>\n<\/ul>\n<ul>\n<li>How many axes does a car or a tractor have?<\/li>\n<\/ul>\n<ul>\n<li>How many axes does a trailer or semi-trailer have?<\/li>\n<\/ul>\n<ul>\n<li>Is there a pneumatic suspension?<\/li>\n<\/ul>\n<ul>\n<li>Which axis is a drive axis?<\/li>\n<\/ul>\n<ul>\n<li>Are there any twin tires?<\/li>\n<\/ul>\n<ul>\n<li>What are axis pressures?<\/li>\n<\/ul>\n<ul>\n<li>What is a total weight?<\/li>\n<\/ul>\n<ul>\n<li>What is the distance between axes?<\/li>\n<\/ul>\n<ul>\n<li>How many axes are there in the group of axes?<\/li>\n<\/ul>\n<ul>\n<li>What is the pressure of each axis in the group?<\/li>\n<\/ul>\n<p>As you can see there are many parameters and combinations. In this situation, a unit test is a must. Let\u2019s start coding with 100% test code coverage.<\/p>\n<h2>Objects creation<\/h2>\n<p>First of all, I wanted to create a code concept that would allow an easy creation of subsequent test cases, as well as real objects. I decided that it would be best to use the Builder Design Pattern for this purpose. In our case, it is important that the set of vehicles consists of a car or a tractor and a trailer or a semi-trailer, respectively. Each axis has its own pressure. The sum of these pressures is the weight of individual vehicles.<\/p>\n<p>This is already enough to create the builder class that will help us create a set of vehicles:<\/p>\n<pre>internal class VehicleSetBuilder\r\n{\r\n public static VehicleSetBuilder Create()\r\n {\r\n  return new VehicleSetBuilder();\r\n }\r\npublic VehicleSet Build() =&gt; vehicleSet;\r\npublic VehicleSetBuilder AddCarAxis(Axis axis)\r\n {\r\n  vehicleSet.Axes.Insert(vehicleSet.Car.AxisCount, axis);\r\n  vehicleSet.Car.AxisCount++;\r\n  return this;\r\n }\r\npublic VehicleSetBuilder AddTrailerAxis(Axis axis)\r\n {\r\n  vehicleSet.Axes.Add(axis);\r\n  vehicleSet.Trailer.AxisCount++;\r\n  return this;\r\n }\r\npublic VehicleSetBuilder IsSemiTrailer()\r\n {\r\n  vehicleSet.Trailer.IsSemiTrailer = true;\r\n  return this;\r\n}\r\ninternal VehicleSetBuilder IsTractor()\r\n {\r\n  vehicleSet.Car.IsTractor = true;\r\n  return this;\r\n }\r\ninternal VehicleSetBuilder HasPneumaticSuspensjon()\r\n {\r\n  vehicleSet.IsPneumaticSuspensjon = true;\r\n  return this;\r\n }\r\n}<\/pre>\n<p>And a single car axle:<\/p>\n<pre>internal class AxisBuilder\r\n{\r\n public static AxisBuilder Create()\r\n {\r\n  return new AxisBuilder();\r\n }\r\n public Axis Build() =&gt; axis;\r\npublic AxisBuilder SetPresure(decimal presure)\r\n {\r\n  axis.PressureWithLoad = presure;\r\n  return this;\r\n }\r\npublic AxisBuilder IsDriveAxis()\r\n {\r\n  axis.IsDrive = true;\r\n  return this;\r\n }\r\npublic AxisBuilder HasDoubleTires()\r\n {\r\n  axis.Wheels = 4;\r\n  return this;\r\n }\r\n}<\/pre>\n<p>Now if we want to create a set of vehicles with specific parameters, consisting of, for example:<\/p>\n<p>Tractor with two axes, where axis loads are 8 and 9 tonnes respectively and the first of the axes is driving, and a semi-trailer with three axes, each of which has 8.5 tonnes pressure equipped with a pneumatic suspension, just write the code:<\/p>\n<pre>var vehicleSet = VehicleSetBuilder\r\n .Create() .AddCarAxis(AxisBuilder.Create().SetPresure(8M).IsDriveAxis().Build())\r\n .AddCarAxis(AxisBuilder.Create().SetPresure(9M).Build())\r\n .AddTrailerAxis(AxisBuilder.Create().SetPresure(8.5M).Build())\r\n .AddTrailerAxis(AxisBuilder.Create().SetPresure(8.5M).Build())\r\n .AddTrailerAxis(AxisBuilder.Create().SetPresure(8.5M).Build())\r\n .HasPneumaticSuspensjon()\r\n .IsTractor()\r\n .IsSemiTrailer()\r\n .Build();<\/pre>\n<p>This way of creating a set of vehicles allows you to create transparent test cases and, of course, real objects in the application.<\/p>\n<h3>The main class of the algorithm<\/h3>\n<p>Now let\u2019s add a class, which task will be to check whether a vehicle set exceeds the permissible standards separately for each of the cases described in the regulations. The most complex rules, which define groups of axes, based on different distances between individual axes and define limits depending on the number of axes in the group and the distance between them. For the sake of simplicity, they will be omitted.<\/p>\n<pre>public class VehicleSetChecker\r\n{\r\n public VehicleSetChecker(VehicleSet vehicleSet)\r\n {\r\n  resultChecker = new List&lt;Info&gt;();\r\n  this.vehicleSet = vehicleSet;\r\n}\r\n \r\n public List&lt;Info&gt; IsOverWeight()\r\n {\r\n  resultChecker.Append(VehicleSet3Axes ());\r\n  resultChecker.Append(VehicleSet4AxesCar2Axes ());\r\n  return resultChecker;\r\n }\r\nprivate Info VehicleSet3Axes()\r\n {\r\n  const string PARAGRAPH = \"\u00a71. 1.\";\r\n  if (vehicleSet.TotalAxes == 3)\r\n  {\r\n   return Info.Paragraph(PARAGRAPH).Result(vehicleSet.TotalWeight, 28);\r\n  }\r\n  return null;\r\n }\r\nprivate Info VehicleSet4AxesCar2Axes()\r\n {\r\n  const string PARAGRAPH = \"\u00a71. 2.\";\r\n  if (IsCarWithAxesAndTrailerAxes(2, 2))\r\n  {\r\n   return Info.Paragraph(PARAGRAPH).Result(vehicleSet.TotalWeight, 36);\r\n  }\r\n  return null;\r\n }\r\n}<\/pre>\n<p>(The rest of rules were omitted)<\/p>\n<h3>First Test<\/h3>\n<p>Now we can create our first test:<\/p>\n<pre>const string PARAGRAPH = \"\u00a71. 1.\";\r\n[TestMethod]\r\npublic void WehicleSetWithThreeAxisTest()\r\n{\r\n var vehicleSet = VehicleSetBuilder\r\n  .Create()\r\n  .AddCarAxis(AxisBuilder.Create().SetPresure(9.5M).IsDriveAxis().HasDoubleTires().Build())\r\n  .AddCarAxis(AxisBuilder.Create().SetPresure(9.5M).IsDriveAxis().HasDoubleTires().Build())\r\n  .AddTrailerAxis(AxisBuilder.Create().SetPresure(9.5M).Build()\r\n  .HasPneumaticSuspensjon()\r\n  .Build();\r\nVehicleSetChecker overWeightChecker = new VehicleSetChecker(vehicleSet);\r\n CheckerResultList result = overWeightChecker.IsOverWeight();\r\n Assert.IsTrue(result.HasParagraphReason(PARAGRAPH));\r\n Assert.IsFalse (result.IsValid);\r\n}<\/pre>\n<p>First we create a simple vehicle set for checking separate rules. All the tests look very similar.<\/p>\n<p>Second, we create a test object. In the above case, it will be a combination of vehicles with a total weight of 28.5 tones. Then we initialize the class, which is responsible for all checks, we perform the check as a result of which we get a list of Info objects. Finally, we check whether the vehicle has been correctly marked as exceeding the weight and whether the collection of Info objects contains the error information resulting from rule 1.1.<\/p>\n<h3>Summary<\/h3>\n<p>Such a test development path and the entire verification algorithm allows to create both tests to validate for:<\/p>\n<ul>\n<li>a particular regulation \u2013 by verifying a vehicle set slightly exceeding the permissible standards and the vehicle set that is in the upper limit of these standards,<\/li>\n<li>all regulations at once \u2013 by verifying whether the entire vehicle does not exceed any standards,<\/li>\n<li>each case asked to be verified by the client. Creation of a very simple test confirmed the correctness of the implementation \u2013 the algorithm returns a precise information about the reason for exceeding the standards.<\/li>\n<\/ul>\n<p>Designing applications and tests at the same time made it possible to prepare such a set of classes that facilitated the creation of further test scenarios and their verification through unit tests.<\/p>\n<p>Despite the high complexity of the algorithm, only a few comments returned from the client about the created module:<\/p>\n<ul>\n<li>a few ended up indicating the paragraph, which is the reason to mark the set of vehicles as exceeding the standards,<\/li>\n<li>one concerned the omission of a specific rule contained in the transitional provisions,<\/li>\n<li>one specific case, which required a professional opinion of a legal expert regarding the interpretation of a law \u2013 unfortunately I had to agree with the lawyers. Maybe the act is written in an ambiguous way, and only with knowledge and experience, it can be interpreted correctly.<\/li>\n<\/ul>\n<p>When creating modules, that we intend to test with unit tests, it is also a good idea to plan it for providing data tests. This will allow you to create realistic tests. It will facilitate not only the creation of both tests but also the implementation of algorithms.<\/p>\n<p>What is the pressure of each axis in the group?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are many articles describing how to write a good test. But the question is how to create a good data test? I will show an example, different from what you may have ever read. A few months ago, I developed a module for checking if the weight of a set of vehicles is too [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[15],"tags":[23,52],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How To Prepare Test Data For Unit Test - Evertop<\/title>\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.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/\" \/>\n<meta property=\"og:locale\" content=\"nb_NO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Prepare Test Data For Unit Test - Evertop\" \/>\n<meta property=\"og:description\" content=\"There are many articles describing how to write a good test. But the question is how to create a good data test? I will show an example, different from what you may have ever read. A few months ago, I developed a module for checking if the weight of a set of vehicles is too [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/\" \/>\n<meta property=\"og:site_name\" content=\"Evertop\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EvertopPoland\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-29T08:15:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-23T18:58:52+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/undraw_programming_2svr-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1020\" \/>\n\t<meta property=\"og:image:height\" content=\"255\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet av\" \/>\n\t<meta name=\"twitter:data1\" content=\"lpabian\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ansl. lesetid\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.evertop.pl\/#organization\",\"name\":\"Evertop\",\"url\":\"https:\/\/www.evertop.pl\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/EvertopPoland\/\",\"https:\/\/www.linkedin.com\/company\/evertop-software-development\/\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#logo\",\"inLanguage\":\"nb-NO\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"width\":582,\"height\":114,\"caption\":\"Evertop\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.evertop.pl\/#website\",\"url\":\"https:\/\/www.evertop.pl\/\",\"name\":\"Evertop\",\"description\":\"we code the future\",\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.evertop.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"nb-NO\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#webpage\",\"url\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/\",\"name\":\"How To Prepare Test Data For Unit Test - Evertop\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/#website\"},\"datePublished\":\"2020-07-29T08:15:42+00:00\",\"dateModified\":\"2020-10-23T18:58:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#breadcrumb\"},\"inLanguage\":\"nb-NO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\\u0142\\u00f3wna\",\"item\":\"https:\/\/www.evertop.pl\/no\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Prepare Test Data For Unit Test\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628\"},\"headline\":\"How To Prepare Test Data For Unit Test\",\"datePublished\":\"2020-07-29T08:15:42+00:00\",\"dateModified\":\"2020-10-23T18:58:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#webpage\"},\"wordCount\":976,\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"keywords\":[\"programming tips\",\"testing\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"nb-NO\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628\",\"name\":\"lpabian\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#personlogo\",\"inLanguage\":\"nb-NO\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g\",\"caption\":\"lpabian\"},\"sameAs\":[\"http:\/\/web.evertop.pl\"],\"url\":\"https:\/\/www.evertop.pl\/no\/author\/lpabian\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Prepare Test Data For Unit Test - Evertop","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.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/","og_locale":"nb_NO","og_type":"article","og_title":"How To Prepare Test Data For Unit Test - Evertop","og_description":"There are many articles describing how to write a good test. But the question is how to create a good data test? I will show an example, different from what you may have ever read. A few months ago, I developed a module for checking if the weight of a set of vehicles is too [&hellip;]","og_url":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/","og_site_name":"Evertop","article_publisher":"https:\/\/www.facebook.com\/EvertopPoland\/","article_published_time":"2020-07-29T08:15:42+00:00","article_modified_time":"2020-10-23T18:58:52+00:00","og_image":[{"width":1020,"height":255,"url":"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/undraw_programming_2svr-1.jpg","path":"\/home\/evertop\/web-evertop\/wp-content\/uploads\/2020\/09\/undraw_programming_2svr-1.jpg","size":"full","id":1813,"alt":"","pixels":260100,"type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Skrevet av":"lpabian","Ansl. lesetid":"6 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.evertop.pl\/#organization","name":"Evertop","url":"https:\/\/www.evertop.pl\/","sameAs":["https:\/\/www.facebook.com\/EvertopPoland\/","https:\/\/www.linkedin.com\/company\/evertop-software-development\/"],"logo":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#logo","inLanguage":"nb-NO","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","width":582,"height":114,"caption":"Evertop"},"image":{"@id":"https:\/\/www.evertop.pl\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.evertop.pl\/#website","url":"https:\/\/www.evertop.pl\/","name":"Evertop","description":"we code the future","publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evertop.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"nb-NO"},{"@type":"WebPage","@id":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#webpage","url":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/","name":"How To Prepare Test Data For Unit Test - Evertop","isPartOf":{"@id":"https:\/\/www.evertop.pl\/#website"},"datePublished":"2020-07-29T08:15:42+00:00","dateModified":"2020-10-23T18:58:52+00:00","breadcrumb":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#breadcrumb"},"inLanguage":"nb-NO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/www.evertop.pl\/no\/"},{"@type":"ListItem","position":2,"name":"How To Prepare Test Data For Unit Test"}]},{"@type":"Article","@id":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#article","isPartOf":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#webpage"},"author":{"@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628"},"headline":"How To Prepare Test Data For Unit Test","datePublished":"2020-07-29T08:15:42+00:00","dateModified":"2020-10-23T18:58:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-prepare-test-data-for-unit-test\/#webpage"},"wordCount":976,"publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"keywords":["programming tips","testing"],"articleSection":["Blog"],"inLanguage":"nb-NO"},{"@type":"Person","@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628","name":"lpabian","image":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#personlogo","inLanguage":"nb-NO","url":"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g","caption":"lpabian"},"sameAs":["http:\/\/web.evertop.pl"],"url":"https:\/\/www.evertop.pl\/no\/author\/lpabian\/"}]}},"_links":{"self":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts\/1887"}],"collection":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/comments?post=1887"}],"version-history":[{"count":1,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts\/1887\/revisions"}],"predecessor-version":[{"id":1933,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts\/1887\/revisions\/1933"}],"wp:attachment":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/media?parent=1887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/categories?post=1887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/tags?post=1887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}