Sunday, November 25, 2012

Two Ways of Initializing a New Object in C#

Recently I posted a question about the different ways one can initialize an object in a C# class. I generally use EXAMPLE 1 below. Resharper suggests I use EXAMPLE 2. EXAMPLE 1 is more intuitive to me (since it is want I always use). However my friend FC pointed out he prefers to "choose a syntax that directly associates the data with the name of its field, rather than relying on the order of the arguments, wherein various perils are wrought", meaning Example 2. I find this argument quite compelling.
My amigo BS has a very nice explanation "The first is required if you need those values for processing during the initialization of your object." This is corroborated in the linked MSDN article at the bottom. BS goes on to say: EXAMPLE 1 "can also be used as a way to force anyone creating the object to always provide those values. The second is useful for things like Data Contract objects where you need a parameter-less constructor for serialization and to assign values directly to its properties in one step. The key difference is values are assigned after construction in the second example."

Even
though my tests tend not to have the serialization requirements facilitated by EXAMPLE 2 I will consider switching course for the sole value stated by FC.
EXAMPLE 1
public static void Main()
{
     StudentName student1 = new StudentName("Marcus", "Deatonus");
...
}
EXAMPLE 2
public static void Main()
{
     StudentName student1 = new StudentName
       {
          FirstName = "Chris",
          LastName = "Bellcamp"
       };
...
}
REFERENCES
http://msdn.microsoft.com/en-us/library/vstudio/bb397680.aspx

Monday, November 12, 2012

SQL Server Unicode and Codepage Support




STEP 1: Find all your collations...



CREATE TABLE #CollationTbl
(ID INT Identity (1,1),ServerCollation sql_variant, DatabaseName varchar(300),    DatabaseCollation sql_variant ,    DatabaseCollationDescription nVarchar(500))

EXEC sp_MSforeachdb


'

Declare
    @1 sql_variant = (SELECT SERVERPROPERTY(''Collation''))
    ,@2 varchar(300) = "?"
    ,@3 sql_variant = (SELECT DATABASEPROPERTYEX("?",''Collation''))
    ,@4 varchar(300)
   
    SET @4 = (SELECT DESCRIPTION FROM fn_helpcollations() WHERE Name = @3)



INSERT INTO #CollationTbl
SELECT @1 , @2, @3, @4
    ;
   
'

SELECT * FROM #CollationTbl;

DROP TABLE #CollationTbl;

STEP 2: Look at each element of the collation. The code page element should be the same or lower page than the code page set in the OS.

The OS codepage can be found using

C:>systeminfo|findstr -i locale
System Locale:             en-us;English (United States)
Input Locale:              N/A

You can also try using chcp, but it really defines the codepage used in the command prompt session, not the codepage for the server. This is useful for debugging character/codepage incompatibility.

C>chcp
Active code page: 437

References
http://msdn.microsoft.com/en-us/library/ms143726%28v=sql.105%29.aspx
http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using
http://msdn.microsoft.com/en-us/library/ms186356%28v=sql.105%29.aspx

Wednesday, November 7, 2012

TFS Aministration - How To Modify a WorkItem Type In Project A Based on Project B


I recently made a purchasing decision for our company to invest in Microsoft Test Manager. This is a shop that uses TFS for source control, work item tracking, and continuous integration. It made sense to leverage the mighty TFSWarehouse for my quality metrics as well. The down side of the decision in general is cost and complexity of administration. I am ok with the administration tasks personally, so for my team I can mitigate that concern. The value of the quality reporting solution mitigates the cost, at least at this company. I would sya that if we were using a setup like Team City (or Cruise Control), a Kanban board, and Mercurial I would be far less likely to make this same decision. The value would not be there as it would require a bunch integration patches just to execute test cases associated with automation.

A recent issue I had is the reason for this post. One team was unable to leverage the UI controls to create test steps and shared steps. I originally thought this was an issue with us working in a mixed MTM 2012 / TFS 2010 environment. It turns out the test case and shared step templates were out of date in one project. The links at the bottom of the page have all the details, but the basic work plan was:

LIST WORKITEM TYPES
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin listwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin listwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Working

EXPORT WORKITEM TYPES FROM Working
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin exportwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Working /f:c:\WorkingTestCaseSettings.xml /n:’Test Case’
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin exportwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Working /f:c:\WorkingSharedStepsSettings.xml /n:’Shared Steps’

EXPORT WORKITEM TYPES FROM Broken
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin exportwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken /f:c:\BrokenTestCaseSettings.xml /n:’Test Case’
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin exportwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken /f:c:\BrokenSharedStepsSettings.xml /n:’Shared Steps’



Make a copy of the Working export files.
Change the  <GLOBALLIST name="Builds - Working" /> value to  <GLOBALLIST name="Builds - Broken" /> in the Working shared steps export file.
Change the  <GLOBALLIST name="Builds - Working" /> value to  <GLOBALLIST name="Builds - Broken" /> in the Working test case export file.

VALIDATE THE MODIFIED WORKITEM TYPES FILES
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin importwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken /f:c:\BrokenTestCaseSettings.xml /v
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin importwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken /f:c:\BrokenSharedStepsSettings.xml /v

IMPORT WORKITEM TYPES FROM Working TO Broken
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin importwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken /f:c:\BrokenTestCaseSettings.xml
PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE> .\witadmin importwitd /collection:http://sql1:8080/tfs/CollectionA  /p:Broken /f:c:\BrokenSharedStepsSettings.xml

REFERENCES
http://social.msdn.microsoft.com/Forums/en-US/vsmantest/thread/6658f6e8-ab07-4579-8db0-441d322ff223
http://msdn.microsoft.com/en-us/library/dd312129%28v=vs.100%29.aspx
http://blogs.msdn.com/b/lakhminder/archive/2010/09/30/tfs-2010-enable-test-case-management-for-upgraded-team-projects.aspx