However, it appears that MoQ avoids the issue I described in the previous post about how Rhino falls over intermittently when running tests in parallel. MoQ avoids this by design. Here's the modified code from Test1 converted to MoQ:
[TestClass]
public class Test1
{
[TestMethod]
public void Test1a()
{
var dependency1 = new Mock<IDependency1>();
var dependency2 = new Mock<IDependency2>();
dependency1.Setup(m => m.DependentMethod("System.String")).Returns(false);
dependency2.Setup(m => m.Kind).Returns(TypeKind.Foo);
dependency2.Setup(m => m.StringProperty).Returns("System.String");
var target = new TestSubject(dependency1.Object, dependency2.Object);
Assert.IsFalse(target.SubjectMethod());
dependency1.VerifyAll();
dependency2.VerifyAll();
}
[TestMethod]
public void Test1b()
{
var dependency1 = new Mock<IDependency1>();
var dependency2 = new Mock<IDependency2>();
dependency1.Setup(m => m.DependentMethod("System.String")).Returns(true);
dependency2.Setup(m => m.Kind).Returns(TypeKind.Foo);
dependency2.Setup(m => m.StringProperty).Returns("System.String");
var target = new TestSubject(dependency1.Object, dependency2.Object);
Assert.IsTrue(target.SubjectMethod());
dependency1.VerifyAll();
dependency2.VerifyAll();
}
}These tests pass every time.
Even the updated brute force parallel tests runs ok.
[TestClass]
public class Test2
{
[TestMethod]
public void BruteForceTest()
{
var threads = new Thread[30];
for (int i = 0; i < threads.GetUpperBound(0); i++)
{
threads[i] = new Thread(this.ThreadAction);
threads[i].Start();
}
for (int i = 0; i < threads.GetUpperBound(0); i++)
{
threads[i].Join();
}
}
private void ThreadAction()
{
var dependency1 = new Mock<IDependency1>();
var dependency2 = new Mock<IDependency2>();
dependency1.Setup(m => m.DependentMethod("System.String")).Returns(false);
dependency2.Setup(m => m.Kind).Returns(TypeKind.Foo);
dependency2.Setup(m => m.StringProperty).Returns("System.String");
var target = new TestSubject(dependency1.Object, dependency2.Object);
target.SubjectMethod();
}
}

No comments:
Post a Comment