使用Moq和Moles测试非虚拟公共方法?

时间:2012-08-07 20:53:31

标签: c# moq moles

如果需要,您将如何使用Moq和Moles测试下面的代码?

我想检查在引发“SomeEvent”时调用一次“TestCommand.RaiseCanExecuteChanged()”命令。

难点在于,RaiseCanExecuteChanged是Microsoft.Practices.Prism.Commands.DelegateCommandBase上的公共非虚方法,而Moles引入了其他复杂功能,其中之一就是它似乎无法模拟只有一个没有方法的方法回报价值。

using Microsoft.Practices.Prism.Commands;
public class SomeEventClass
{
    public event Action SomeEvent;
}

public class TestClass
{
    public TestClass(SomeEventClass someEventClass)
    {
        TestCommand = new DelegateCommand(() => { /* do stuff */}, CanExecute);
        someEventClass.SomeEvent += () => TestCommand.RaiseCanExecuteChanged();
    }

    private bool CanExecute()
    {
        //Some logic
        return true;
    }

    public DelegateCommand TestCommand { get; private set; }
}

1 个答案:

答案 0 :(得分:0)

Moles应该能够填充没有返回类型的方法。有些东西阻止了鼹鼠绕道而行。

我建议使用存根和依赖注入,而不是构建模拟(这可能需要一段时间)或使用Moles填充调用。