Sometimes unit testing existing code can be really hard. Especially when coding by exceptions (using Try.. Catch.. then do nothing!).
This will look a bit like this
From the outside we might not be able to test whether ReallyDoSomething has thrown an exception except if we can validate state changes done by ReallyDoSomething. And if we can't change the code much (like adding dependencies using parameters or change the return type of the method) we won't be able to write that test at all.
Another way is to use the logger to validate that.
The piece of code above use Log4Net as the logging framework and allow us to use it in our unit tests like this
Just like that we can intercept all the logged messages by our production code.
I've used this trick a few times now when other options were not available. Hope it helps.
Friday, August 31, 2012
Wednesday, August 15, 2012
TFS Queries : Searching in all work items
For an intro on LinqPad and the TFS API please read this post
For the list of all the posts in this series please read this one
To search for work items effectively we can use a special TFS API on the WorkItemStore class. The query format is based the Work Item Query Language (or WIQL ) and we can't use Linq directly, but still, we can use LinqPad to write a quick little query.
Microsoft.TeamFoundation.Client
Microsoft.TeamFoundation.Common
Microsoft.TeamFoundation.VersionControl.Client
Microsoft.TeamFoundation.WorkItemTracking.Client
Here we get the list of all the work items from all projects containing the word 'phone' in their title.
To find more about WIQL please take a look at the MSDN section on it.
For the list of all the posts in this series please read this one
Context
To search for work items effectively we can use a special TFS API on the WorkItemStore class. The query format is based the Work Item Query Language (or WIQL ) and we can't use Linq directly, but still, we can use LinqPad to write a quick little query.
Required references
Microsoft.TeamFoundation.Client
Microsoft.TeamFoundation.Common
Microsoft.TeamFoundation.VersionControl.Client
Microsoft.TeamFoundation.WorkItemTracking.Client
Query (C# Statements)
var tfs = TfsTeamProjectCollectionFactory .GetTeamProjectCollection(new Uri("http://localhost:8088/tfs")); tfs.EnsureAuthenticated(); var workItemStore = tfs.GetService<WorkItemStore>(); var title = "phone"; var query = string.Format(@" Select [Id], [Work Item Type], [Title], [State] Where [Title] Contains '{0}' From WorkItems", title); workItemStore.Query(query).Cast<WorkItem>() .Select(wi => new { wi.Id, wi.AreaPath, Type = wi.Type.Name, wi.Title, wi.State }) .OrderBy(wi => wi.AreaPath).ThenBy(wi => wi.Type).ThenBy(wi => wi.Title) .Dump();
Result
Here we get the list of all the work items from all projects containing the word 'phone' in their title.
To find more about WIQL please take a look at the MSDN section on it.
IOrderedEnumerable<> (1 item) | ||||
Id | AreaPath | Type | Title | State |
---|---|---|---|---|
2 | Project1 | Bug | Fix the phone number on the Contact page | Done |
Wednesday, August 1, 2012
TFS Queries: Listing all the branches
For an intro on LinqPad and the TFS API please read this post
For the list of all the posts in this series please read this one
When it comes to branches, using the TFS Web Access or Team Explorer we can navigate around the source code explorer to see branches from various Team Project and related information. But to get the big picture there is an easier way using the TFS API.
Microsoft.TeamFoundation.Client
Microsoft.TeamFoundation.Common
Microsoft.TeamFoundation.VersionControl.Client
Here we can see a bit more information on the branches like related parent and child branches in a simple list.
For the list of all the posts in this series please read this one
Context
When it comes to branches, using the TFS Web Access or Team Explorer we can navigate around the source code explorer to see branches from various Team Project and related information. But to get the big picture there is an easier way using the TFS API.
Required references
Microsoft.TeamFoundation.Client
Microsoft.TeamFoundation.Common
Microsoft.TeamFoundation.VersionControl.Client
Query (C# Statements)
var tfs = TfsTeamProjectCollectionFactory. GetTeamProjectCollection(new Uri("http://localhost:8088/tfs")); tfs.EnsureAuthenticated(); var versionControl = tfs.GetService<VersionControlServer>(); versionControl.QueryRootBranchObjects(RecursionType.Full) .Where(b => !b.Properties.RootItem.IsDeleted) .Select(s => new { Project = s.Properties.RootItem.Item .Substring(0, s.Properties.RootItem.Item.IndexOf('/', 2)), Properties = s.Properties, DateCreated = s.DateCreated, ChildBranches = s.ChildBranches }) .Select(s => new { s.Project, Branch = s.Properties.RootItem.Item.Replace(s.Project, ""), Parent = s.Properties.ParentBranch != null ? s.Properties.ParentBranch.Item.Replace(s.Project, "") : "", Version = (s.Properties.RootItem.Version as ChangesetVersionSpec) .ChangesetId, DateCreated = s.DateCreated, Owner = s.Properties.Owner, ChildBranches = s.ChildBranches .Where (cb => !cb.IsDeleted) .Select(cb => new { Branch = cb.Item.Replace(s.Project, ""), Version = (cb.Version as ChangesetVersionSpec).ChangesetId }) }) .OrderBy(s => s.Project).ThenByDescending(s => s.Version) .Dump();
Result
Here we can see a bit more information on the branches like related parent and child branches in a simple list.
IOrderedEnumerable<> (4 items) | ||||||||||||
Project | Branch | Parent | Version | DateCreated | Owner | ChildBranches | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
$/Project1 | /Release v1.1.0.0 | /Main | 14 | 04/07/2012 9:18:01 PM | Domain\Pascal |
| ||||||
$/Project1 | /Main | 8 | 28/06/2012 10:24:05 PM | Domain\Pascal |
| |||||||
$/Project2 | /Team | /Main | 13 | 04/07/2012 9:17:24 PM | Domain\Pascal |
| ||||||
$/Project2 | /Main | 12 | 04/07/2012 9:17:02 PM | Domain\Pascal |
| |||||||
47 |
Subscribe to:
Posts (Atom)