【发布时间】:2017-01-27 23:15:44
【问题描述】:
我有一个派生类,它通过属性注入获取对象并在该对象的信使上注册:
public class Foo : AbsFoo
{
private IBar bar;
public override IBar Bar
{
get {return bar;}
set
{
bar = value
if(bar != null)
{
bar.Messenger.Register<MyMessage>(this, m => SomeMethod());
}
}
}
public override void SomeMethod()
{
//..
}
}
基本上,我想设置Bar,发送消息,并验证SomeMethod() 是否被调用。
我的测试如下所示:
var fixture = new Fixture();
fixture.Customize(new AutoConfiguredMoqCustomization());
var messenger = new Messenger();
var barFixture = fixture.Create<IBar>();
barFixture.Messenger = messenger
var fooMock = new Mock<Foo> {CallBase = true};
fooMock.SetupAllProperties();
fooMock.Object.Bar = barFixture;
fooMock.VerifySet(s=> s.Bar = It.IsAny<IBar>(),Times.AtLeastOnce()); // Success
messenger.Send(new MyMessage());
fooMock.Verify(c => c.SomeMethod(), Times.Once); // Fails
VerifySet()成功,传入了正确的对象(通过调试检查),messenger实例也一样。但是方法调用上的Verify失败了,我也不是很明白为什么。
我不太确定 fooMock 上必须使用的设置方法(Setup?SetupSet?另一个?)
【问题讨论】:
标签: c# unit-testing moq mvvm-light autofixture