एक सीलबंद वर्ग का नकल करना पूरी तरह से उचित है क्योंकि कई ढांचे वर्गों को सील कर दिया गया है।
मेरे मामले में मैं नकली करने की कोशिश कर रहा हूं .Net's MessageQueue क्लास ताकि मैं अपने सुंदर अपवाद हैंडलिंग तर्क को टीडीडी कर सकूं।
अगर किसी के पास "गैर-अतिव्यापी सदस्य पर अमान्य सेटअप" के संबंध में मोक की त्रुटि को दूर करने के तरीके पर विचार है, तो कृपया मुझे बताएं।
कोड:
[TestMethod]
public void Test()
{
Queue<Message> messages = new Queue<Message>();
Action<Message> sendDelegate = msg => messages.Enqueue(msg);
Func<TimeSpan, MessageQueueTransaction, Message> receiveDelegate =
(v1, v2) =>
{
throw new Exception("Test Exception to simulate a failed queue read.");
};
MessageQueue mockQueue = QueueMonitorHelper.MockQueue(sendDelegate, receiveDelegate).Object;
}
public static Mock<MessageQueue> MockQueue
(Action<Message> sendDelegate, Func<TimeSpan, MessageQueueTransaction, Message> receiveDelegate)
{
Mock<MessageQueue> mockQueue = new Mock<MessageQueue>(MockBehavior.Strict);
Expression<Action<MessageQueue>> sendMock = (msmq) => msmq.Send(It.IsAny<Message>()); //message => messages.Enqueue(message);
mockQueue.Setup(sendMock).Callback<Message>(sendDelegate);
Expression<Func<MessageQueue, Message>> receiveMock = (msmq) => msmq.Receive(It.IsAny<TimeSpan>(), It.IsAny<MessageQueueTransaction>());
mockQueue.Setup(receiveMock).Returns<TimeSpan, MessageQueueTransaction>(receiveDelegate);
return mockQueue;
}
स्रोत
2010-04-06 20:05:01
नकली मत बनो! [इसके बजाए संरचना का प्रयोग करें] (http://stackoverflow.com/a/891820/274502)। – cregox