1

如有必要,您将如何使用 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; }
}
4

1 回答 1

0

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

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

于 2012-08-08T19:03:18.183 回答