I am working in an application that is mostly single-thread, single user. There are a few worker threads here and there, and they are only using thread safe objects and classes. The unit tests are actually testing those with multiple threads (explicitly created for the tests), and they test fine.
The VSTS unit tests fail when testing business objects and sub-systems that are not thread safe. It is okay for them not to be thread-safe, that's the way the application uses them.
But the 'one thread per TestMethod' approach of MS tests kills us. I've had to implement object locks in many unit test classes just to ensure that the tests are run one after the other (I don't really care about the order, but I can't have two test methods hitting the same object at the same time).
The code looks like this:
[TestClass] public class TestSomeObject { static object turnStile = new object(); ... [TestMethod] public void T01_TestThis() { lock(turnStile) { .. actual test code } } [TestMethod] public void T02_TestThat() { lock(turnStile) { -- actual test code } } }
Is there a better/more elegant way to make the test run sequentially?
Ordering classes and casesTests are executed in ascending order. If no Order attribute is specified default 0 is assigned. Multiple Order attributes can have same value.
Unit tests run one at a time. There is no parallelism.
Use an Ordered Test.
Test > New Test > Ordered Test
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With