我是Moq的新手,如果“Bounds”属性未声明为虚拟,我想知道如何编写以下测试。
[TestMethod]
public void SettingSize_Sets_Bounds_ExactlyOnce()
{
// given
var mock = new Mock<Visual>();
var anonymSize = DrawingHelper.AnonymousSize();
// when
mock.Object.Size = anonymSize;
// then
mock.VerifySet(visual => visual.Bounds = new Rectangle(DrawingHelper.Origin(),anonymSize), Times.Once());
}
为了提供一点上下文,Visual类实现了IVIsual接口,声明了Bounds属性。因此,我可以使用该接口来创建Mock对象,但我没有看到我应该如何更改上面的测试以仍然测试具体的IVisual实现者(Visual类)的行为。
具体来说,我想确保在设置属性Size时,还设置了非虚拟属性Bounds。
Moq可以实现吗?如果不是那个允许这个的框架是什么?
答案 0 :(得分:1)
您的when
不正确。
mock.Object.Size = anonymSize;
您正在测试模拟:您需要在测试真实对象时为模拟对象的属性赋值。提供有关您要测试的实际对象的更多信息。
你不需要模拟,你在模拟依赖项时测试类。你似乎没有任何依赖。
所以我要做的是:
// Given
Visual v = new Visual();
// When
v.Size = someSize;
// Then
Assert.That(v.Bounds == someExpectedBounds);