ReSharper Code Cleanup does not fix “Convert to Lambda Expression” issues.

Problem: ReSharper Code Cleanup does not fix “Convert to Lambda Expression” issues. Solution: Use regular expression find and replace to correct. Explanation: I am a recent ReSharper convert so my code does not match the format suggested by ReSharper.  The Code Cleanup feature of ReSharper can really help to get your code in line. However, there does not appear to be an option to have it convert code to Lambda Expressions for you. Because I had so many lines of code to fix I decided to use the Regular Expression option of the Find and Replace dialog to fix all my lines at once.  The goal of a regular expression is to allow you to describe patterns of interest. Below is an example of a line of code that would cause ReSharper to suggest changing to a Lambda Expression. dest.DeviceGet = () => { return diverter; };   After being converted to an expression the results would appear like this: dest.DeviceGet = () => diverter; As you can see the curly braces, semicolon and return statement were removed. If you review the lines you will realize there is a pattern we can use to locate the lines that need to be corrected. We are looking for a line that contains a curly brace ‘{‘ followed by a space ‘ ‘ and the word ‘return’ and another space ‘ ‘. Now we want to copy everything up to the ‘;’. This portion of the line will remain after it is converted. Finally we want to select the ‘;’, space ‘ ‘ and closing curly brace ‘}’;  The regular expression to select this line is below: \{ return {[^;]+}; \} The regular expression begins be locating the starting curly brace \{. I must precede the curly brace with a backslash because it is a reserved character. Next is the space followed by the word ‘return’ and another space. Next we have to identify the portion of the string we need to copy. We do this by using a pair of curly braces {} to tag that portion of the string. Any pattern matched within those braces will be tagged so we can use it in the replace textbox of the Find and Replace dialog. The next portion of our regular expression needs to match all characters up to but not including the first semicolon ‘;’.  We achieve this by adding “[^;]+” to our regular expression.  The square brackets define a character class.  A character class matches any character within the brackets.  However, if the first character is a circumflex ‘^’ it changes the meaning to match any character except the ones within the brackets.  Adding the + matches one or more occurrences of the preceding regular expression.  Because we places our character class within curly braces the matched string will be tagged for later use. Finally we match the actual ‘;’, space and closing curly brace with “; \}”. The completed regular expression defines what we want to find and tags the portion we need to retain. Each pair of curly braces is given a number staring from 1. To use the first tagged portion in the Find and Replace dialog we simply type \1.  Below is a screen shot of the Find an Replace dialog ready to correct all your “Convert to Lambda Expression” warnings.  Note: you must check the “Use Regular expressions” check box.

Registering Workgroup Test Agent with Test Controller in Domain

Problem: I have a test controller in a domain and a test agent in a workgroup and I can’t register the agent with the controller. Solution: Create shadow accounts on the agent machine and on the controller machine that are in the Administrators Group.  Shadow accounts are accounts with the exact same name and password. You can test your shadow account by trying to map to a share on the controller machine from the agent machine.  Try to access \\controlerMachine\c$  when you are challenged for credentials use the shadow account.  Note you may have to disable your firewall to perform this test. Install and configure the controller on the controller machine.  In the Configure Controller dialog use your TFS account and select the project collection. Using Microsoft Test Manager (MTM) under the Lab Center tab verify that your controller is registered on the controller tab. Second log in to the test agent machine as the shadow account and install and configure the test agent with the test controller.  When asked for a user name use the shadow account again. Using MTM refresh the contoller and you should see the Test Agent listed.  This machine is now ready to be used in Lab to create a physical environment.

Custom Action causes install to fail

Normal 0 false false false EN-US X-NONE X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} Problem: I get “Could not find file *.InstallState” when using a custom action in Windows Setup Project. Solution: Override Install, Commit, Rollback, and Uninstall methods. Explanation: You will get this method if you don’t implement Install action. In my case I only implemented the Commit method.  Once I implemented the other methods my error went away.

How to mole System.dll

Problem: I get “no suitable method found to override” errors when I mole system.dll. Solution: Modify the System.moles file in your project and exclude everything except the types you are trying to mole. Explanation: I was trying to mole the SerialPort class in System.IO.Ports. After adding the mole for System.dll I began to get “no suitable method found to override” errors.  To resolve this issue I simply double clicked the System.moles file to open it in my IDE.  Then I modified the file so that moles were created only for the types under System.IO.  Change System.moles from this: <Moles xmlns="http://schemas.microsoft.com/moles/2010/">  <Assembly Name="System" /></Moles> to this: <Moles xmlns="http://schemas.microsoft.com/moles/2010/">   <Assembly Name="System" />   <StubGeneration>      <Types>         <Clear />         <Add Namespace="System.IO!" />      </Types>   </StubGeneration></Moles>

What to do when my CUIT thows a PlaybackFailureException

Updated (Oct 11, 2011) Problem: I have a textbox that has a maximum length of five characters. I want to record a Data Driven CUIT to test that you cannot type in more than five characters.  However, when I attempt to set the textbox to a six character value the CUIT throws a PlaybackFailureException. Solution: Simply set Playback.PlaybackSettings.SkipSetPropertyVerification = true; before the call that throws the PlaybackFailureException and return it to false after. Explanation: After setting a property of any UI control, the record and playback engine performs a verification step to make sure that the set succeeded and the UI control now has the value it attempted to set it to. For example if you have a text box that only allows 5 characters and you attempt to set it to 6 characters the engine will throw a PlaybackFailureException. If you are trying to test that if I actually type 123456 that the value is 12345 you will have to set Playback.PlaybackSettings.SkipSetPropertyVerification = true; before your test attempts to fill in the value.

Build workspace folder already mapped.

Problem: My Team Build keeps failing with an error that my source folder is already mapped in another workspace. The path C:\Builds\1\Demo\Reports\Sources is already mapped in workspace 7_1_WIN-GS9GMUJITS8. Solution: Use the tf.exe tool to delete the workspace holding on to that location. Explanation: tf workspace /delete [/collection:TeamProjectCollectionUrl] workspacename[;workspaceowner] [/login:username,[password]]

How to enable code coverage in my Team Build

Problem: I am not getting code coverage results in my build. Solution: Ensure you have a test settings file selected in your build definition. Explanation: On the process tab of your build definition expand the Automated Testing section under Basic and make sure the TestSettings File is pointing to the test settings file that has code coverage configured. You can watch a video below that demonstrates how to do this.

CUIT Demo of Feature Pack 2 Coded UI Test Editor

Problem: I have a Coded UI Test that is failing on Playback. Solution: Use the Coded UI Test Editor in Feature Pack 2 to adjust the UI Map and add actions to your test. Explanation: I felt a write up would be too hard to follow so I recorded a video instead which you can watch below. In this video we are going to cover a few features of the Coded UI Test Editor available in Feature Pack 2 for Visual Studio 2010. The Coded UI Test Editor greatly improves an automation engineers experience working with Coded UI Test. The features we are going to demonstrate today are splitting actions into separate methods, renaming methods and locating UI controls in a running application. Many coded UI demos show you the happy path scenario where everything works perfectly.  While helping clients implement Coded UI Test in the real world you quickly realize that the happy path can be hard to stay on.  The goal of this web cast is to show a recording that does not work as recorded and techniques we can use to adjust the recording to yield the desired results.

I don't want Entity Framework code counted in code coverage.

Problem: The code generated by the Entity Framework is distorting my code coverage numbers. Solution: Add a Code Generation Item and add the [DebuggerNonUserCode] attribute to the generated classes. Explanation: As I described in a previous post here the [DebuggerNonUserCode] hides the code from code coverage results.  I am a huge fan of code coverage however; I do not see the point in testing generated code especially when most of it is just value objects. Entity Framework uses T4 Text Templates to generate the typed ObjectContext and EntityObject derived entity classes used in your code.  If the code generated does not fit your needs you can add a Code Generation Item to your project and the Entity Framework will use your custom T4 Text Template to generate the classes. Adding a new Code Generation Item is very easy.  Simply open your .edmx file and right click on the design surface and select Add Code Generation Item… from the context menu.  When the Add New Item dialog is presented select the Code section under your language of choice.  You will be presented two generator templates to choose from.  The ADO.NET EntityObject Generator template generates the same code as the default code generated by the Entity Framework Designer.  In solution explorer you will see a new file with a .tt extension.  This file will create a .cs (or .vb) file which appears under the .tt file in Solution Explorer. All we have to do now is modify the template by adding a using statement for System.Diagnostics and add the [DebuggerNonUserCode] attribute on all the partial classes in the template (there are 3). With the template in your solution all the Entity Framework code will be generated with the [DebuggerNonUserCode] attribute and removed from the code coverage calculations.   You can download a copy of the T4 Template below. Model1.tt (45.02 kb)