Tod*_*ang 6 c# unit-testing moq mocking visual-studio-2012
使用Moq,我习惯于将mocks设置为Verifiable.如您所知,当您希望确保被测代码实际上在依赖项上调用方法时,这很方便.
例如在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();
Run Code Online (Sandbox Code Playgroud)
我一直在使用VS2012的"Fakes Framework"(由于缺乏更好的名称),这是非常光滑的,我开始更喜欢Moq,因为它似乎更具表现力,使Shims变得容易.但是,我无法弄清楚如何重现类似于Moq的Verifiable/Verify实现的行为.我在Stubs上找到了InstanceObserver属性,这听起来可能就像我想要的那样,但截至9/4/12都没有文档,我不清楚如何使用它,如果它甚至是正确的.
任何人都能指出我做正确的方向,如Moq Verifiable/Verify VS2012的假货?
- 9/5/12编辑 -
我意识到问题的解决方案,但我仍然想知道是否有一种内置的方法来使用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!
}
}
Run Code Online (Sandbox Code Playgroud)
- 9/5/12结束编辑 -
由于我没有听说过更好的解决方案,因此我将 2012 年 9 月 5 日的编辑称为目前最好的方法。
编辑 找到了描述最佳实践的神奇文章。http://www.peterprovost.org/blog/2012/11/29/visual-studio-2012-fakes-part-3/