2012-08-07 80 views
1

如果需要,您将如何使用Moq和Moles测试下面的代码?用Moq和Moles测试非虚拟公共方法?

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

难度在于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; } 
} 

回答

0

痣应该能够填充一个没有返回类型的方法。有些东西阻止痣绕过这种方法。

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

+0

你是对的,只是一个痣新手的错误。现在如何让鼹鼠一起玩,但这是另一个问题。 – SDK 2012-08-10 08:51:15

相关问题