Pregunta

I feel like I may be going about something entirely wrong, so if you have an alternate approach, please let me know.

I'm building a service with service stack. I'm testing that service with Xunit and NCrunch. I want my tests to run in parallel, and they currently do thanks to NCrunch... However, there is one problem.

All of my tests rely on the fact that my service is up and running - it's a shared resource.. a dependency. I don't particularly care for it, but it seems that service stack does not let you spin up multiple instances for each test (plus, I'd need to do some nasty table prefixes or something inside postgresql - blek)...

All I need is some way to start my service via code before any tests have run - and stop it when all tests have finished. I need it to be via code because I don't receive code coverage information on server-side code if I have to start the service manually.

I can manually start the service and all my tests run in parallel and pass perfectly fine - but the problem is that I can't seem to find a good hook for a 'pre-test' and 'post-test' action.

I have looked into using a semaphore as a sort of 'reference counting' solution, but it's actually the opposite of what I'd need. I don't want to have to specify ahead of time how many tests will be ran.. I need something similar to a dijkstra counting semaphore - but I haven't found an implementation that works based upon a named (system-wide) semaphore.

A Mutex won't work - because the test that happens to start the service still has to know when all of the other tests finish before stopping the service - it cannot just do so in the Dispose method.

A lot of the normal solutions related to synchronizing objects between threads does not apply in this situation because the tests are ran inside their own AppDomain.

Thanks for all your help in advance.

¿Fue útil?

Solución

I wrote a blog post about a solution to a similar problem a couple of years ago.

http://netvignettes.wordpress.com/2012/01/03/sharepoint-net-3-5-woes-and-synchronization-between-processes/

Scroll down to the code blocks and start reading around there, so you can skip the SharePoint cruft at the top.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top