{"id":7462,"date":"2017-10-09T21:44:55","date_gmt":"2017-10-10T02:44:55","guid":{"rendered":"https:\/\/daedtech.wpenginepowered.com\/?p=7462"},"modified":"2017-10-09T21:44:55","modified_gmt":"2017-10-10T02:44:55","slug":"look-unit-test-framework-options-net","status":"publish","type":"post","link":"https:\/\/daedtech.com\/look-unit-test-framework-options-net\/","title":{"rendered":"A Look at Some Unit Test Framework Options for .NET"},"content":{"rendered":"<p><em>Editorial note: I originally wrote this post for the Stackify blog. \u00a0You can <a href=\"https:\/\/stackify.com\/unit-test-frameworks-csharp\/\">check out the original here, at their site<\/a>. \u00a0While you&#8217;re there have a look at their offerings, Prefix and Retrace.<\/em><\/p>\n<p>If you enjoy the subject of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cognitive_bias\">human cognitive biases<\/a>, you should check out the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Curse_of_knowledge\">curse of knowledge<\/a>. \u00a0When dealing with others, we tend to assume they know what we know. \u00a0And we do this when no justification for the assumption exists.<\/p>\n<p>Do you fancy a more concrete example? \u00a0Take a new job and count how many people bombard you with company jargon and acronyms,\u00a0<em>knowing full well you just started a few hours ago.<\/em> \u00a0This happens because these folks cannot imagine not knowing these things without expending considerable mental effort.<\/p>\n<p>Why do I lead with this in a post about unit test frameworks? \u00a0Well, it seems entirely appropriate to me. \u00a0I earn my living as an IT management and strategy consultant, causing me to spend time at many companies helping them improve software development practice. \u00a0Because of this, I have occasion to see an awful lot of introductions to unit testing. \u00a0And these introductions usually subconsciously\u00a0<em>assume<\/em>\u00a0<em>knowledge of unit testing.<\/em><\/p>\n<p>&#8220;It&#8217;s easy! \u00a0Just pick a unit test runner and a coverage tool, and get those setup. \u00a0Oh, you&#8217;ll also probably want to pick a mocking framework, and here are some helpful Nuget packages. \u00a0Anyway, now just write a test. \u00a0We&#8217;ll start with a calculator class&#8230;&#8221;<\/p>\n<p><a href=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4934\" src=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg\" alt=\"\" width=\"590\" height=\"762\" srcset=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg 274w, https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert-232x300.jpg 232w\" sizes=\"auto, (max-width: 590px) 100vw, 590px\" \/><\/a><\/p>\n<p>Today, I will do my best to spare you that. \u00a0I have some practice with this, since I write a lot, publish courses, and train developers. \u00a0So let&#8217;s take a look at test frameworks.<\/p>\n<h3>What Are Unit Tests?<\/h3>\n<p>Thought you&#8217;d caught me there, didn&#8217;t you? \u00a0Don&#8217;t worry. \u00a0I won&#8217;t just assume you know these things.<\/p>\n<p>Let&#8217;s start with <a href=\"http:\/\/softwaretestingfundamentals.com\/unit-testing\/\">unit testing in its most basic form<\/a>, leaving all other subjects aside. \u00a0You want to focus on a piece of functionality in your code and test it in isolation. \u00a0For example, let&#8217;s say that we had the aforementioned Calculator class and that it contained an Add(int, int) method. \u00a0Let&#8217;s say that you want to write some code to test that method.<\/p>\n<pre class=\"lang:c# decode:true\">public class CalculatorTester\r\n{\r\n    public void TestAdd()\r\n    {\r\n        var calculator = new Calculator();\r\n\r\n        if (calculator.Add(2, 2) == 4)\r\n            Console.WriteLine(\"Success\");\r\n        else\r\n            Console.WriteLine(\"Failure\");\r\n    }\r\n}<\/pre>\n<p>No magic there. \u00a0I just create a test called &#8220;CalculatorTester&#8221; and then write a method that instantiates and exercises Calculator.Add(). \u00a0You could write this knowing nothing about unit testing practice at all. \u00a0And, if someone had told you to automate the testing of Calculator.Add(), you may have done this exact thing.<\/p>\n<p>Congratulations. \u00a0You have written a unit test. \u00a0 I say this because it focuses on a method and tests it in isolation.<\/p>\n<p><!--more--><\/p>\n<h3>What Are Unit Test Frameworks?<\/h3>\n<p>Well, as you can imagine, having this sort of testing across your entire codebase could prove cumbersome. \u00a0You&#8217;d write lots of classes just like this one and then&#8230; what? \u00a0You&#8217;d look at all of the console output for failures, only to discover that failure proved pretty inscrutable.<\/p>\n<p>Most likely you would then have the clever idea to include the name of the test in the output so that you could see\u00a0<em>what<\/em> had failed. \u00a0From there, you might start to add some sort of GUI-like feedback to the results, to present them in a more readable fashion. \u00a0From there, who knows? \u00a0Maybe you write a Visual Studio plugin or maybe you find a way to incorporate this test suite into your build?<\/p>\n<p>Well, it turns out that if you did all that stuff, you would have built yourself a unit testing framework. \u00a0Let&#8217;s take a look now at what some code written for an\u00a0<em>actual<\/em> unit test framework (MS Test) looks like.<\/p>\n<pre class=\"lang:c# decode:true\">[TestClass]\r\npublic class CalculatorTests\r\n{\r\n    [TestMethod]\r\n    public void TestMethod1()\r\n    {\r\n        var calculator = new Calculator();\r\n\r\n        Assert.AreEqual&lt;int&gt;(4, calculator.Add(2, 2));\r\n    }\r\n}<\/pre>\n<p>Unlike the last snippet, we have a<em> bit<\/em> of magic here. \u00a0Notice the attributes, TestClass and TestMethod. \u00a0Those exist simply to tell the framework to pay attention to them when executing the unit test suite. \u00a0When you want to get results, you invoke the\u00a0<em>unit test runner<\/em>, and it executes all methods decorated like this, compiling the results into a visually pleasing report that you can view.<\/p>\n<p>So, with that background established, let&#8217;s take a look at your major test runner options.<\/p>\n<h3>MSTest<\/h3>\n<p>First, since I&#8217;ve alreadry mentioned it, I&#8217;ll lead with MSTest. \u00a0MSTest was actually the name of a command line tool for executing tests, so we&#8217;re really talking about something called the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Visual_Studio_Unit_Testing_Framework\">&#8220;Visual Studio Unit Testing Framework.&#8221;<\/a>\u00a0 But veterans will colloquially call it MSTest, so let&#8217;s use that here.<\/p>\n<p>MSTest ships with Visual Studio, so you have it right out of the box, in your IDE, without doing anything. \u00a0This lack of friction to getting started is arguably its killer feature. \u00a0The preferred .NET pattern for unit tests is to have a test project for each production (regular) project in your codebase. \u00a0With MSTest, getting that setup is as easy as File-&gt;New Project. \u00a0Then, when you write a test, you can right click on it and execute, having your result displayed in the IDE. \u00a0Pretty neat, huh? \u00a0And you can also see code coverage without installing any other tools.<\/p>\n<p>On the con side, one of the most frequent knocks on MSTest is that of performance. \u00a0People find the experience can be sluggish. \u00a0On top of that, many people struggle with interoperability. \u00a0After all, Microsoft makes it to integrate with other Microsoft\/Visual Studio stuff, so making it work with third party things would probably not rate as a priority.<\/p>\n<h3>NUnit<\/h3>\n<p>Next up, I&#8217;ll talk about <a href=\"https:\/\/www.nunit.org\/\">NUnit<\/a>. \u00a0Unit test frameworks have a history dating back almost 30 years, so they long predated .NET. \u00a0NUnit started out as a port from Java&#8217;s JUnit, but\u00a0the authors eventually redid it to be more C# idiomatic. \u00a0So the tool has the rich history of unit testing behind it, but with an appropriately C# flavor.<\/p>\n<p>Because of its independent history, NUnit also has the distinction of interoperating nicely with other tools, such as non-Microsoft build platforms and custom test runners. \u00a0On top of that, NUnit also has a reputation for fast testing running, and it has some nice additional features as well, including test annotations allowing easy specification of multiple inputs to a given test.<\/p>\n<p>The main downside here is that it doesn&#8217;t integrate into Visual Studio the way that MSTest does. \u00a0Using it means doing extra work, and installing extra tools, regardless of how easy those tools&#8217; authors may make the process.<\/p>\n<h3>xUnit.NET<\/h3>\n<p>The last option that I&#8217;ll cover is <a href=\"https:\/\/xunit.github.io\/\">xUnit.NET<\/a>\u00a0(I&#8217;ll just call it xUnit for brevity, not to be confused with the xUnit category of test tools).\u00a0 One of the creators of the idiomatic version of NUnit went on to create xUnit. \u00a0xUnit has a relatively innovative for users to reason about their tests, dividing tests into &#8220;facts&#8221; and &#8220;theories&#8221; to distinguish between &#8220;always true&#8221; and &#8220;true for the right data,&#8221; respectively.<\/p>\n<p>xUnit earns points for creating extremely intuitive\u00a0terminology and ways to reason about the language of tests. \u00a0On top of that, the tool has a reputation for excellent extensibility. \u00a0Another awesome feature of xUnit is actually not a feature of the software, but a feature of the authors. \u00a0They have a reputation for commitment, responsiveness and evangelism.<\/p>\n<p>On the con side, some users seem to wish the tool had more documentation. \u00a0Beyond that, the community seems pretty enthusiastic and it&#8217;s hard to find a lot of detractors. \u00a0This may speak to an implicit con, however. \u00a0It has a small but loyal core of users because it requires a different way of thinking about some things and perhaps a bit more learning.<\/p>\n<h3>Just Get Started<\/h3>\n<p>I&#8217;ll close here by stating something emphatically. \u00a0If you&#8217;re looking to start your unit testing journey, do NOT get bogged down in trying to pick one of these frameworks. \u00a0Just pick one &#8212; roll some dice, flip a few coins &#8212; whatever.<\/p>\n<p>They have their pros and cons, their detractors and supporters. \u00a0But every one of them is better, by far, than continuing not to write unit tests. \u00a0You can always re-evaluate and switch later if you need to. \u00a0I&#8217;ve used a lot of different unit test frameworks in my career and never felt locked in or concerned about it.<\/p>\n<p>So get started as quickly as you can. \u00a0And before you know it, you&#8217;ll suffer the curse of knowledge with unit testing and not be able to conceive of someone not versed in the pros and cons of their favorite testing framework.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Editorial note: I originally wrote this post for the Stackify blog. \u00a0You can check out the original here, at their site. \u00a0While you&#8217;re there have a look at their offerings, Prefix and Retrace. If you enjoy the subject of human cognitive biases, you should check out the curse of knowledge. \u00a0When dealing with others, we&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[67],"tags":[152,257,13,258],"class_list":["post-7462","post","type-post","status-publish","format-standard","hentry","category-net","tag-mstest","tag-nunit","tag-unit-testing","tag-xunit"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A Look at Some Unit Test Framework Options for .NET - DaedTech<\/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:\/\/stackify.com\/unit-test-frameworks-csharp\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"A Look at Some Unit Test Framework Options for .NET - DaedTech\" \/>\n<meta name=\"twitter:description\" content=\"Editorial note: I originally wrote this post for the Stackify blog. \u00a0You can check out the original here, at their site. \u00a0While you&#8217;re there have a look at their offerings, Prefix and Retrace. If you enjoy the subject of human cognitive biases, you should check out the curse of knowledge. \u00a0When dealing with others, we...\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Erik Dietrich\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/look-unit-test-framework-options-net\\\/\"},\"author\":{\"name\":\"Erik Dietrich\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/person\\\/3dae63e91a0fa60c8051a2171fa687d2\"},\"headline\":\"A Look at Some Unit Test Framework Options for .NET\",\"datePublished\":\"2017-10-10T02:44:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/look-unit-test-framework-options-net\\\/\"},\"wordCount\":1431,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/IndustryExpert.jpg\",\"keywords\":[\"MSTest\",\"NUnit\",\"Unit Testing\",\"XUnit\"],\"articleSection\":[\".NET\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/look-unit-test-framework-options-net\\\/\",\"url\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/\",\"name\":\"A Look at Some Unit Test Framework Options for .NET - DaedTech\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/IndustryExpert.jpg\",\"datePublished\":\"2017-10-10T02:44:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#primaryimage\",\"url\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/IndustryExpert.jpg\",\"contentUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/IndustryExpert.jpg\",\"width\":274,\"height\":354},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/stackify.com\\\/unit-test-frameworks-csharp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/daedtech.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Look at Some Unit Test Framework Options for .NET\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#website\",\"url\":\"https:\\\/\\\/daedtech.com\\\/\",\"name\":\"DaedTech\",\"description\":\"Stories about Software\",\"publisher\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/daedtech.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#organization\",\"name\":\"DaedTech LLC\",\"url\":\"https:\\\/\\\/daedtech.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/07\\\/SmallLogo.jpg\",\"contentUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/07\\\/SmallLogo.jpg\",\"width\":82,\"height\":84,\"caption\":\"DaedTech LLC\"},\"image\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/person\\\/3dae63e91a0fa60c8051a2171fa687d2\",\"name\":\"Erik Dietrich\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg\",\"caption\":\"Erik Dietrich\"},\"sameAs\":[\"https:\\\/\\\/daedtech.com\"],\"url\":\"https:\\\/\\\/daedtech.com\\\/author\\\/erik\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A Look at Some Unit Test Framework Options for .NET - DaedTech","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:\/\/stackify.com\/unit-test-frameworks-csharp\/","twitter_card":"summary_large_image","twitter_title":"A Look at Some Unit Test Framework Options for .NET - DaedTech","twitter_description":"Editorial note: I originally wrote this post for the Stackify blog. \u00a0You can check out the original here, at their site. \u00a0While you&#8217;re there have a look at their offerings, Prefix and Retrace. If you enjoy the subject of human cognitive biases, you should check out the curse of knowledge. \u00a0When dealing with others, we...","twitter_image":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg","twitter_misc":{"Written by":"Erik Dietrich","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#article","isPartOf":{"@id":"https:\/\/daedtech.com\/look-unit-test-framework-options-net\/"},"author":{"name":"Erik Dietrich","@id":"https:\/\/daedtech.com\/#\/schema\/person\/3dae63e91a0fa60c8051a2171fa687d2"},"headline":"A Look at Some Unit Test Framework Options for .NET","datePublished":"2017-10-10T02:44:55+00:00","mainEntityOfPage":{"@id":"https:\/\/daedtech.com\/look-unit-test-framework-options-net\/"},"wordCount":1431,"commentCount":4,"publisher":{"@id":"https:\/\/daedtech.com\/#organization"},"image":{"@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#primaryimage"},"thumbnailUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg","keywords":["MSTest","NUnit","Unit Testing","XUnit"],"articleSection":[".NET"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/stackify.com\/unit-test-frameworks-csharp\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/daedtech.com\/look-unit-test-framework-options-net\/","url":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/","name":"A Look at Some Unit Test Framework Options for .NET - DaedTech","isPartOf":{"@id":"https:\/\/daedtech.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#primaryimage"},"image":{"@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#primaryimage"},"thumbnailUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg","datePublished":"2017-10-10T02:44:55+00:00","breadcrumb":{"@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/stackify.com\/unit-test-frameworks-csharp\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#primaryimage","url":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg","contentUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/06\/IndustryExpert.jpg","width":274,"height":354},{"@type":"BreadcrumbList","@id":"https:\/\/stackify.com\/unit-test-frameworks-csharp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/daedtech.com\/"},{"@type":"ListItem","position":2,"name":"A Look at Some Unit Test Framework Options for .NET"}]},{"@type":"WebSite","@id":"https:\/\/daedtech.com\/#website","url":"https:\/\/daedtech.com\/","name":"DaedTech","description":"Stories about Software","publisher":{"@id":"https:\/\/daedtech.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/daedtech.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/daedtech.com\/#organization","name":"DaedTech LLC","url":"https:\/\/daedtech.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/daedtech.com\/#\/schema\/logo\/image\/","url":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/07\/SmallLogo.jpg","contentUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/07\/SmallLogo.jpg","width":82,"height":84,"caption":"DaedTech LLC"},"image":{"@id":"https:\/\/daedtech.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/daedtech.com\/#\/schema\/person\/3dae63e91a0fa60c8051a2171fa687d2","name":"Erik Dietrich","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg","caption":"Erik Dietrich"},"sameAs":["https:\/\/daedtech.com"],"url":"https:\/\/daedtech.com\/author\/erik\/"}]}},"_links":{"self":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/posts\/7462","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/comments?post=7462"}],"version-history":[{"count":0,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/posts\/7462\/revisions"}],"wp:attachment":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/media?parent=7462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/categories?post=7462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/tags?post=7462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}