Unit testing Caliburn applications in NUnit
This is part three in my series on Caliburn, if you haven't please read Part 1: Getting started with Caliburn and Part 2: Multiple Views on one ViewModel.
In this post I will look into the unit testing features of Caliburn and try to give a quick introduction to the essentials of what you need to know to write a couple of small unit tests in NUnit. The documentations on caliburn.codeplex.com on unit testing is fairly good, so I will only try to fill in some missing pieces and give a quick start guide to unit testing Caliburn. If or when you bump into problems with the simple setup described here, it's time to move over to more detailed documentation available in both the documentation and discussion forum on Codeplex.
Running NUnit in an STA thread
While unit testing a WPF Caliburn application, I bumped into the following error:
The calling thread must be STA
and I ended up with a cross-thread exception. When diving into this problem I found that TestDriver.Net actually runs in STA (acronym for Singel Thread Apartment) by default, but NUnit is not! It is however a fairly simple configuration change to get NUnit running in STA. Add or update your app.config in your test project with following:
How to unit test private methods in C# using NUnit
Ever had the need to unit test a private method? Ever change a private method to public just to able to write a test for it? You are definitely not alone! A couple of weeks back I had a very interesting discussions with a very good colleague of mine: "What to do if I want to unit test a private method in C#". In this post I will show how you can use NUnit in combination with Reflection to unit test private methods!
Logging in .Net: a short study
I have been using different third-party logging tools for both .Net (C# and C++) and Java, but in my current project we are using a custom logging tool. Don't ask me why we have written our own framework for this, but I guess it's partly because we have worked on our current code base since before .Net 1.0 was released, hence I guess the number of available frameworks at that time was quite limited. But now I am tired of spending time and money maintaining code we could get for free elsewhere!