似乎模拟服务正在与消费者共享,就好像模拟接口是单例的。如果相关,我正在使用 AutoMoq/Moq 组合。
class TestableClass
{
public IService service;
public TestableClass(IService s) { this.service = s }
}
Mocker.GetMock<IService>.Setup(s => s.Do()).Returns(1);
var c1 = Mocker.Resolve<TestableClass>();
var c2 = Mocker.Resolve<TestableClass>();
Assert.That(c1, Is.Not.SameAs(c2)); // true
Assert.That(c1.service, Is.NotSameAs(c2.service)) // false/fail
有没有办法确保每次创建消费实例时 IService 都是不同的实例?原因是:
Mocker.GetMock<IPauseTimer>()
.Setup(t => t.Begin(20))
.Raises(t => t.Tick += null, new PauseTimerEventArgs(1))
.Verifiable();
当我创建我的两个测试实例时,它们共享这个单一的PauseTimer
,并且当c1
触发Begin
函数时,两者都c1
对c2
事件做出反应,什么时候才c1
应该。