During the course of the WPF project we are working on at work, we decided to go down the Agile/XP/TDD/Mocks/Continuous Integration route, which means Unit tests, lots of them.
We are using NUnit, which I really like, but we are also using WPF, we are obviously using the latest/greatest patterns AKA MVVM, but from time to time, it is nice to be able to test certain things on WPF controls/windows, etc.
So I set out to create a small NUnit test like the following:

Now to me this looked fine, but when I ran this code, I got the following horror show.

Where NUnit moaned about “The calling thread must be STA”. Oh, that’s to bad. So I had a small think, and then came up with this small idea, just pass the original code to a helper class and have it run that in a Thread using STA threading apartment state. Sounds cool, but did it work. Well yes actually it did, and here is the small helper class.

And here is how to use this from a NUnit test.

And just to prove it works, here is a screen shot of the actual test running successfully.

Here is a link to a small test project that you can see this working with in case you want to use this in your own projects.
Enjoy!