แม้ว่าฉันจะยอมรับว่า@ คำตอบของพอลเป็นวิธีที่แนะนำไปผมแค่อยากจะเพิ่มทางเลือกหนึ่งที่ให้บริการโดย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);