我有以下方法需要用最小起订量进行测试。问题是 switch 语句中调用的每个方法都是私有的,包括最后的 PublishMessage。但这个方法(ProcessMessage)是公共的。我如何测试这一点,以便确保根据参数进行调用?请注意,我不是测试私有方法,我只是想测试“调用”。我想模拟这些私有方法并检查它们是否使用安装程序调用,但 Moq 不支持模拟私有方法。
public void ProcessMessage(DispenserMessageDataContract dispenserMessage)
{
var transOptions = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, transOptions))
{
switch (dispenserMessage.Type)
{
case DispenserMessageType.AckNack:
UpdateAckNackMessageQueue(dispenserMessage);
break;
case DispenserMessageType.FillRequest:
CreateFillRequestMessageQueue(dispenserMessage);
break;
case DispenserMessageType.FillEvent:
UpdateFillEventMessageQueue(dispenserMessage);
break;
case DispenserMessageType.RequestInventory:
CreateRequestInventoryMessageQueue(dispenserMessage);
break;
case DispenserMessageType.ReceiveInventory:
CreateReceiveInventoryMessageQueue(dispenserMessage);
break;
}
scope.Complete();
}
PublishMessage(dispenserMessage);
}
您必须将这些私有方法更改为至少受保护的虚拟方法来模拟它们,然后使用mock.Protected来模拟它们(http://blogs.clariusconsulting.net/kzu/mocking-protected-members-with-moq/ http://blogs.clariusconsulting.net/kzu/mocking-protected-members-with-moq/)。你不能模拟私有方法。
Moq(以及其他一些框架)使用 Castle Project 的 DynamicProxy 在运行时动态生成代理,以便可以在不修改类代码的情况下拦截对象的成员。该拦截只能在公共虚拟方法和受保护的虚拟方法上完成。
请参阅以下网址了解更多信息:http://www.castleproject.org/projects/dynamicproxy/ http://www.castleproject.org/projects/dynamicproxy/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)