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