भले ही मैं इस बात से सहमत हूं कि @ पॉल का जवाब जाने का अनुशंसित तरीका है कि मैं केवल एक वैकल्पिक तरीका जोड़ना चाहता हूं जो moq
स्वयं द्वारा प्रदान किया गया हो।
के बाद से SomeClass
है abstract
यह वास्तव में mockable है, लेकिन public void SomeMehod()
नहीं है। मुद्दा यह है कि नकल करने का तरीका ढूंढा जाए और किसी तरह उस तरीके को लागू किया जाए और फिर CallBase
कॉल को प्रचारित किया जाए SomeOtherMethod()
। यह एक हैक के रूप में लग सकता है लेकिन यह सार में सरल है। इसका उपयोग इस मामले में किया जा सकता है यदि प्रस्तावित रीफैक्टरिंग संभव नहीं है।
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
तब आप ध्वज DummyMethod()
को सेट करके कॉल को प्रचारित करने के लिए सेटअप कर सकते थे CallBase
।
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);