用Moq模擬擴展方法我有一個預先存在的界面......public interface ISomeInterface{
void SomeMethod();}并且我使用mixin擴展了這個表面...public static class SomeInterfaceExtensions{
public static void AnotherMethod(this ISomeInterface someInterface)
{
// Implementation here
}}我有一個叫這個我要測試的課程...public class Caller{
private readonly ISomeInterface someInterface;
public Caller(ISomeInterface someInterface)
{
this.someInterface = someInterface;
}
public void Main()
{
someInterface.AnotherMethod();
}}和測試,我想模擬界面并驗證對擴展方法的調用... [Test]
public void Main_BasicCall_CallsAnotherMethod()
{
// Arrange
var someInterfaceMock = new Mock<ISomeInterface>();
someInterfaceMock.Setup(x => x.AnotherMethod()).Verifiable();
var caller = new Caller(someInterfaceMock.Object);
// Act
caller.Main();
// Assert
someInterfaceMock.Verify();
}然而,運行此測試會產生異常......System.ArgumentException: Invalid setup on a non-member method:x => x.AnotherMethod()我的問題是,有一個很好的方法來模擬混合調用嗎?
3 回答

阿晨1998
TA貢獻2037條經驗 獲得超6個贊
你不能用模擬框架“直接”模擬靜態方法(因此擴展方法)。您可以嘗試Moles(http://research.microsoft.com/en-us/projects/pex/downloads.aspx),這是Microsoft提供的一種免費工具,可以實現不同的方法。以下是該工具的說明:
Moles是.NET中基于委托的測試存根和繞道的輕量級框架。
Moles可用于繞過任何.NET方法,包括密封類型中的非虛擬/靜態方法。
您可以將Moles與任何測試框架一起使用(它與此無關)。
- 3 回答
- 0 關注
- 749 瀏覽
添加回答
舉報
0/150
提交
取消