我正在开发一个项目,该项目具有一些在Team City上执行时会随机失败的单元测试。而且没有人可以在本地计算机上重现相同的行为。
由于几乎所有测试都在TestDelegate
动作中执行被测试的方法,并在我相信的动作之外执行Asserts
和Verifies
,因此可能是并发问题。
但是在对测试代码进行任何更改之前,我想了解有关在 .Net Framework 4.0 中执行TestDelegate
操作的更多信息。
这是单元测试随机失败的示例。
[TestFixture]
public class MyClassTest
{
private Mock<IAnyService> _anyService;
private MyClass _myClass;
[SetUp]
public void Setup()
{
_anyService = new Mock<IAnyService>();
_myClass.AnyService = new MyClass() { AnyService = _anyService.Object };
}
[Test]
public void MyClass_Should_Call_MockClassMethod()
{
TestDelegate action = () => _myClass.MyMethod();
Assert.DoesnotThrow(action);
_anyService.Verify(_ => _.MockClassMethod(),Times.Once);
}
}
我的课堂方法
public override void MyMethod()
{
...DoALotOfStuff
AnyService.MockClassMethod();
}
这是Team City上的错误
预期对该模拟调用一次,但被调用0次:_ => _.MockClassMethod()
未配置任何设置。
未执行任何调用。
它随机失败的原因是什么?
是否有可能仅在Team City上以单独的线程执行操作?
编辑:
我能够使用此命令执行测试以使测试随机失败。但还是不知道为什么。
nunit3-console (ls -r ./tests/**/bin/**/*.Tests.dll -exclude *.Product* | % FullName | sort-object -Unique) --teamcity --x86 --framework=v4.0