{"id":3943,"date":"2012-11-09T13:31:07","date_gmt":"2012-11-09T13:31:07","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2012\/11\/09\/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1using-traits-in-the-unit-test-explorer\/"},"modified":"2022-07-21T06:47:47","modified_gmt":"2022-07-21T14:47:47","slug":"how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1using-traits-in-the-unit-test-explorer","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/devops\/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1using-traits-in-the-unit-test-explorer\/","title":{"rendered":"How to manage unit tests in Visual Studio 2012 Update 1 : Part 1\u2013Using Traits in the Unit Test Explorer"},"content":{"rendered":"<p><font size=\"3\">As a result of writing the post: <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2012\/11\/07\/edit-test-case-properties-directly-from-the-test-runner-of-microsoft-test-manager.aspx\">Edit Test Case properties directly from the test runner of Microsoft Test Manager<\/a> I asked one the ALM MVPs, <a href=\"http:\/\/geekswithblogs.net\/terje\/Default.aspx\">Terje Sandstrom<\/a>, to also look at one of the most requested Visual Studio Update 1 features \u2013 but an area I didn\u2019t have a post on yet: <em><font color=\"#9b00d3\">Grouping in the new Unit Test Explorer<\/font><\/em>.\u00a0\u00a0 He takes a look and by morning sends me this post and indicates he wants to do three more in this series! <\/font><\/p>\n<blockquote>\n<p><strong>Part 2: Using traits in TFS Build<\/strong><\/p>\n<p><strong>Part 3: Testing and building using different test frameworks<\/strong><\/p>\n<p><strong>Part 4: Managing code coverage for unit tests<\/strong><\/p>\n<\/blockquote>\n<p><font size=\"3\">***************************************************************<\/font><\/p>\n<p><strong><font size=\"3\"><\/font><\/strong><\/p>\n<p><strong><font size=\"3\">Part 1:\u00a0 Using Traits in the Unit Test Explorer <strong>by Terje Sandstrom<\/strong><\/font><\/strong><\/p>\n<p>This is the first post in a series on Unit Testing in Visual Studio 2012, focusing on the improvements in Update 1.<\/p>\n<p>Visual Studio 2012 has a great new Test Explorer.\u00a0 The Test Explorer is where you see the results of your unit tests.\u00a0 In Update 1 it has been extended, and you can now organize and filter the test runs based on several conditions, among them your Projects, and Traits.\u00a0\u00a0 Traits is a new concept,\u00a0 a common denominator for several underlying terms, Test Category, Test Property, Priority, and Owner.\u00a0<\/p>\n<p>Traits are not only useful as a grouping mechanism in the Test Explorer, it also part of what can control which tests you run.\u00a0 This has been a big request \u2013 because it means the developer can focus on the tests relevant to the work, and not be bothered with running other, perhaps long-running tests, which would otherwise slow down the whole development\u00a0 experience.\u00a0 No longer with Update 1!\u00a0\u00a0<\/p>\n<p>Traits are also used in TFS Build as one of the criteria to determine which tests to run for the different builds there. TFS Build is not \u201ctrait-aware\u201d in itself, but TFS Build can act on the underlying types, Categories and Properties. The details are in Part 3 in this series of posts.<\/p>\n<p>\u00a0<\/p>\n<p><strong>Using Traits and Projects for grouping<\/strong><\/p>\n<p>Let us start with a MSTest based example.\u00a0 In a sample project we add 3 tests, and put them into separate categories.\u00a0 This is done by adding the TestCategory attribute to the method, and the name of the category as a string.<\/p>\n<p><img decoding=\"async\" title=\"image_thumb1\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb1\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/6038.image_thumb1_thumb_1FA8B535.png\" width=\"401\" height=\"429\" \/><\/p>\n<p>Open up the Test Explorer, and choose the Group button.\u00a0 Compared to RTM we have now got 2 more options, Project and Trait.<\/p>\n<p><img decoding=\"async\" title=\"image_thumb4\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb4\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/0284.image_thumb4_thumb_5F729BBA.png\" width=\"365\" height=\"263\" \/><\/p>\n<p>Under the menu the three test methods are listed based on Outcome. Changing that to Trait gives us the test grouped by their MSTest Category.<\/p>\n<p><img decoding=\"async\" title=\"image_thumb5\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb5\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/5140.image_thumb5_thumb_38385285.png\" width=\"362\" height=\"434\" \/><\/p>\n<p>\u00a0<\/p>\n<p>The other option is to group by Project, and adding a new test project it looks like this:<\/p>\n<p><img decoding=\"async\" title=\"image_thumb12\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb12\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/0184.image_thumb12_thumb_4CBDA203.png\" width=\"364\" height=\"380\" \/><\/p>\n<p>\u00a0<\/p>\n<p><strong>Using more trait concepts<\/strong><\/p>\n<p>As mentioned above, Traits can also be based on some other properties.\u00a0\u00a0 Owner and Priority are explicit and straight forward enough,\u00a0 whereas TestProperty gives you a property-value system.\u00a0 That means you can extend the Traits with your own concepts using TestProperties.<\/p>\n<p>In the code below, we have added these properties, and also a new property called \u201cTime\u201d, to indicate if it is a fast or long running test.<\/p>\n<p><img decoding=\"async\" title=\"image_thumb2\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb2\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/5556.image_thumb2_thumb_251725D9.png\" width=\"367\" height=\"423\" \/><\/p>\n<p>\u00a0<\/p>\n<p>In the Text Explorer, still grouping by Trait, this now looks like:<\/p>\n<p><img decoding=\"async\" title=\"image_thumb3\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb3\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/7115.image_thumb3_thumb_44C5FFA1.png\" width=\"372\" height=\"517\" \/><\/p>\n<p>\u00a0<\/p>\n<p>Notice that the same test method appears multiple times, but this is just visual, they are only run once, so the total time here is not 57mS but still 19mS.<\/p>\n<p>Did I say \u201cjust visual\u201d ?\u00a0 It is in fact more than that <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-smile\" style=\"border-top-style: none;border-left-style: none;border-bottom-style: none;border-right-style: none\" alt=\"Smile\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/4118.wlEmoticon-smile_6099388C.png\" \/>.\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><strong>Using Traits to control test running<\/strong><\/p>\n<p>The Search field is named and looks like a search field.\u00a0 But a better term for it is that it is a Filter controlling what to run.\u00a0 If you click the small arrow to the right, a drop down menu appears.<\/p>\n<p><img decoding=\"async\" title=\"SNAGHTML23dfc1c4_thumb1\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"SNAGHTML23dfc1c4_thumb1\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/4314.SNAGHTML23dfc1c4_thumb1_thumb_4B790924.png\" width=\"418\" height=\"173\" \/><\/p>\n<p>You see a set of possible Search Filters, and above that a recent list which contains a previous set filter.\u00a0<\/p>\n<p>If you click on Trait, it appears inside the search field <img decoding=\"async\" title=\"image_thumb41\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb41\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/4807.image_thumb41_thumb_6B27E2EC.png\" width=\"184\" height=\"31\" \/>, and you have to fill out the specific trait-name.<\/p>\n<p>Filtering on trait \u201cCI\u201d gives us this list:<\/p>\n<p><img decoding=\"async\" title=\"image_thumb6\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb6\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/6038.image_thumb6_thumb_2AF1C972.png\" width=\"356\" height=\"242\" \/><\/p>\n<p>\u00a0<\/p>\n<p>The filter term will match any trait you have, be it in a category, a priority, a owner or in a property.\u00a0 In fact it matches also these words, so you can set a filter to<\/p>\n<p><strong>Trait:\u201dPriority\u201d<\/strong><\/p>\n<p>and it will match all tests that have any priority set.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>The filter set will stay there until you change or clear it, or restart Visual Studio.\u00a0<\/p>\n<p>With this filter set, the <strong>Run All<\/strong> button now runs <strong>ONLY<\/strong> the tests within this filter.\u00a0<\/p>\n<p><img decoding=\"async\" title=\"image_thumb8\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb8\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/7522.image_thumb8_thumb_31A4D2F5.png\" width=\"354\" height=\"342\" \/><\/p>\n<p>This also applies to the automatic test runner \u2013 I assume you are aware of that one ?<\/p>\n<hr \/>\n<p><strong>The automatic test runner<\/strong><\/p>\n<p><img decoding=\"async\" title=\"SNAGHTML23ec2f46_thumb1\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"SNAGHTML23ec2f46_thumb1\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/5140.SNAGHTML23ec2f46_thumb1_thumb_0A6A89C0.png\" width=\"360\" height=\"132\" \/><\/p>\n<p>The icon to the upper left is enabled here, it means that the background automatic test runner will run every time a build is performed.<\/p>\n<p>Make it a habit of pressing <strong>Shift-Ctrl-B<\/strong> instead of just saving your work.\u00a0 This keyboard shortcut will do a save all and then build your application.\u00a0<\/p>\n<p>Enabling the automatic test runner can be done either from this button in the Test Explorer or from the menu:<\/p>\n<p><img decoding=\"async\" title=\"image_thumb10\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb10\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/0172.image_thumb10_thumb_6330408A.png\" width=\"526\" height=\"158\" \/><\/p>\n<p>\u00a0<\/p>\n<p><strong>Control test runs based on other filter terms<\/strong><\/p>\n<p>The filter menu allows you to set up filters for not only Traits and Projects, but also for other aspects.\u00a0 The table below summarizes these with the syntax to use:<\/p>\n<table cellspacing=\"0\" cellpadding=\"2\" width=\"844\" border=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"100\">\n        <strong>Filter term<\/strong>\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        <strong>Syntax:<\/strong>\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        <strong>Example:<\/strong>\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        <strong>Comment:<\/strong>\n      <\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"100\">\n        Error Message\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        Message: <any part of\u00a0 text after message output>\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        Message:\u201dAssert.Fail\u201d\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        \u00a0\n      <\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"100\">\n        Output\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        Output: <any part of the output text>\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        Output:\u201dResult\u201d\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        Assume a trace command sending out \u201cResult is\u201d+resultvalue\n      <\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"100\">\n        Fully Qualified Name\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        Fullname: <namespace.classname.methodname>\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        FullName:\u201dUnitTestProject1\u201d\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        Takes all tests in that namespace\n      <\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"100\">\n        FilePath\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        FilePath: <any part of the file path name>\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        FilePath:\u201dIntegration.Test\u201d\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        All tests with this in the name. Includes folders above the file too, that is the file\u2019s fully qualified name.\n      <\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"100\">\n        Outcome\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        Outcome: <Failed|Passed>\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        Outcome:\u201dFailed\u201d\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        \u00a0\n      <\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"100\">\n        \u00a0\n      <\/td>\n<td valign=\"top\" width=\"315\">\n        \u00a0\n      <\/td>\n<td valign=\"top\" width=\"170\">\n        \u00a0\n      <\/td>\n<td valign=\"top\" width=\"257\">\n        \u00a0\n      <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A filter expression can be negated by placing a \u2018-\u2018 in front.<\/p>\n<p><img decoding=\"async\" title=\"image_thumb14\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb14\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/4370.image_thumb14_thumb_3BF5F755.png\" width=\"358\" height=\"303\" \/><\/p>\n<p>\u00a0<\/p>\n<p>Filter expressions can be combined, that is, you can add more together, just separate them by spaces.\u00a0 The combined filter expression is the logical AND of the two expressions.<\/p>\n<p>If we look at first only tests for CI, we find two tests:. In<\/p>\n<p><img decoding=\"async\" title=\"image_thumb22\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb22\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/1258.image_thumb22_thumb_42A900D8.png\" width=\"364\" height=\"242\" \/><\/p>\n<p>Adding another search term, looking for only tests with Owner = Terje, reduces the list.<\/p>\n<p><img decoding=\"async\" title=\"image_thumb18\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb18\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/3480.image_thumb18_thumb_1B6EB7A3.png\" width=\"365\" height=\"270\" \/><\/p>\n<p>The most typical use for the logical AND is to handle property value settings.\u00a0 If you want to explicitly filter on Priority = 2, and be sure not to filter on anything else which uses the number 2, that could be expressed as: <img decoding=\"async\" title=\"image_thumb\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image_thumb\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/4478.image_thumb_thumb_0925F0E1.png\" width=\"154\" height=\"38\" \/><\/p>\n<p>\u00a0<\/p>\n<p>By combining the different traits you should be able to limit the number of tests you run locally.\u00a0 Pay attention to creating a set of useful and unique trait names, categories and property\/value based ones.\u00a0 This will make it easier to later set up filters.\u00a0 Also take into account that you use the same traits when filtering unit test cases\u00a0 for running in different builds.\u00a0 We will cover this in Part 3.<\/p>\n<p>Also note that these traits are not limited to MSTest, but works just as fine with the other test frameworks, we cover that in Part 2.\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><strong>Some useful links:<\/strong><\/p>\n<ol>\n<li>Peter Provost has written a <a href=\"http:\/\/www.peterprovost.org\/blog\/2012\/03\/08\/Whats-New-in-Visual-Studio-11-Beta-Unit-Testing\/\" target=\"_blank\" rel=\"noopener\"><u>great blog post<\/u><\/a> on the features of the new Unit testing in Visual Studio 2012.\u00a0 <\/li>\n<li>Running unit tests with the Test Explorer is described in<u> <\/u><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/hh270865(v=vs.110).aspx\" target=\"_blank\" rel=\"noopener\"><u>this MSDN article<\/u><\/a>.\u00a0 <\/li>\n<li>The different unit test frameworks that can be plugged in, is listed in <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2012\/03\/02\/visual-studio-11-beta-unit-testing-plugins-list.aspx\" target=\"_blank\" rel=\"noopener\"><u>this post<\/u><\/a>.\u00a0 <\/li>\n<li>Installing the unit test frameworks is <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/hh598952(v=vs.110).aspx\" target=\"_blank\" rel=\"noopener\"><u>described here<\/u><\/a>. <\/li>\n<li>Controlling code coverage is described <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/dd537628.aspx\" target=\"_blank\" rel=\"noopener\"><u>here<\/u><\/a>, <\/li>\n<li>Modifying the runsettings is <a href=\"http:\/\/blogs.msdn.com\/b\/sudhakan\/archive\/2012\/05\/11\/customizing-code-coverage-in-visual-studio-11.aspx\" target=\"_blank\" rel=\"noopener\"><u>here<\/u><\/a>.\u00a0 <\/li>\n<li>Details on <a href=\"http:\/\/blogs.msdn.com\/b\/vikramagrawal\/archive\/2012\/07\/23\/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx\"><u>Test Categories<\/u><\/a> <\/li>\n<\/ol>\n<p>\u00a0<\/p>\n<pre><code>&lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;\/strong&gt;&lt;\/p&gt; &lt;\/blockquote&gt;    &lt;p&gt;&lt;img src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2012\/11\/terjes_1336086861_84-1.png\" width=\"131\" height=\"120\" \/&gt;&lt;\/p&gt;  &lt;p&gt;By &lt;\/p&gt;  &lt;h5&gt;&lt;a href=\"http:\/\/geekswithblogs.net\/terje\/Default.aspx\"&gt;Terje Sandstrom&lt;\/a&gt;&lt;\/h5&gt;  &lt;p&gt;------ Chief Software Geek at Inmeta Consulting in Scandinavia ----- and a Visual Studio ALM MVP&lt;\/p&gt;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>As a result of writing the post: Edit Test Case properties directly from the test runner of Microsoft Test Manager I asked one the ALM MVPs, Terje Sandstrom, to also look at one of the most requested Visual Studio Update 1 features \u2013 but an area I didn\u2019t have a post on yet: Grouping in [&hellip;]<\/p>\n","protected":false},"author":77,"featured_media":45953,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3943","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"acf":[],"blog_post_summary":"<p>As a result of writing the post: Edit Test Case properties directly from the test runner of Microsoft Test Manager I asked one the ALM MVPs, Terje Sandstrom, to also look at one of the most requested Visual Studio Update 1 features \u2013 but an area I didn\u2019t have a post on yet: Grouping in [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/3943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/users\/77"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/comments?post=3943"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/3943\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media\/45953"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media?parent=3943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/categories?post=3943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/tags?post=3943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}