由于使用 Moq,我习惯于将模拟设置为可验证。如您所知,当您想确保被测代码实际调用依赖项上的方法时,这很方便。
例如起订量:
// Set up the Moq mock to be verified
mockDependency.Setup(x => x.SomethingImportantToKnow()).Verifiable("Darn, this did not get called.");
target = new ClassUnderTest(mockDependency);
// Act on the object under test, using the mock dependency
target.DoThingsThatShouldUseTheDependency();
// Verify the mock was called.
mockDependency.Verify();
我一直在使用 VS2012 的“Fakes Framework”(因为不知道它的更好名称),它非常漂亮,我开始更喜欢它而不是 Moq,因为它看起来更有表现力并且使 Shims 变得容易。但是,我无法弄清楚如何重现类似于 Moq 的可验证/验证实现的行为。我在 Stubs 上找到了 InstanceObserver 属性,这听起来可能是我想要的,但截至 2012 年 9 月 4 日还没有文档,而且我不清楚如何使用它,如果它是正确的。
任何人都可以为我指出正确的方向,比如使用 VS2012 的 Fakes 进行 Moq Verifiable/Verify 之类的事情吗?
-- 2012 年 9 月 5 日编辑 --
我意识到了问题的解决方案,但我仍然想知道是否有内置方法可以使用 VS2012 Fakes 来解决这个问题。如果可以的话,我会让这个开放一段时间,让有人声称。这是我的基本想法(如果没有编译,请道歉)。
[TestClass]
public class ClassUnderTestTests
{
private class Arrangements
{
public ClassUnderTest Target;
public bool SomethingImportantToKnowWasCalled = false; // Create a flag!
public Arrangements()
{
var mockDependency = new Fakes.StubIDependency // Fakes sweetness.
{
SomethingImportantToKnow = () => { SomethingImportantToKnowWasCalled = true; } // Set the flag!
}
Target = new ClassUnderTest(mockDependency);
}
}
[TestMethod]
public void DoThingThatShouldUseTheDependency_Condition_Result()
{
// arrange
var arrangements = new Arrangements();
// act
arrangements.Target.DoThingThatShouldUseTheDependency();
// assert
Assert.IsTrue(arrangements.SomethingImportantToKnowWasCalled); // Voila!
}
}
-- 9/5/12 结束编辑 --