2011-09-28 96 views
1

我想建立一個通用測試生成器來生成對象,我想在測試中使用。我想創建的一件事是模擬接口的實現。我希望這些Mock擁有嚴格的mockbehaviour,並且設置afaik的唯一方法是通過構造函數參數。我使用這個代碼來創建我們的界面模擬:如何使用帶Moq參數的反射來創建模擬?

public object Build(Type type) 
{ 
    if (type.IsInterface) 
    { 
     List<object> mockParameters = new List<object>(); 
     mockParameters.Add(MockBehavior.Strict); 
     Mock mock = (Mock)Activator.CreateInstance(typeof(Mock<>).MakeGenericType(type), mockParameters); 
     return mock.Object; 
    } 
} 

這給了我一個ArgumentException:構造函數參數不能爲接口嘲笑傳遞。 我如何設置MockBehavior.Strict用我的模擬反射創建?

回答

1

您的代碼可以大大簡化這個:

public T Build() 
{ 
    if (typeof(T).IsInterface) 
    { 
     return new Mock<T>(MockBehavior.Strict).Object; 
    } 
} 
+0

謝謝,我可以看到,在這種情況下我當然能做到這一點。但是,我也需要從類型創建它。 (我編輯了這個問題來強調這一點) –

+0

@JesperKihlberg:不幸的是,我從來沒有用過Moq,但是你得到的異常看起來很明顯:你不能從界面創建一個嚴格的模擬... –

相關問題