我有一個設置模擬的問題,所以我可以在我的Mocked對象上調用Marshal.ReleaseComObject()
。Mocking and Marshal.ReleaseComObject()
我正在使用Moq來設置一個類型IFeature(來自第三方接口庫)的模擬。模擬的設置是相當簡單:
var featureMock = new Mock<IFeature>();
IFeature feature = featureMock.Object;
在我的代碼,在while循環被創建的特徵對象,通過型光標(FeatureCursor
)的運行。由於第三方庫的遺留問題,Feature
對象存在已知的內存泄漏問題。因此,我必須通過Marshal.ReleaseComObject()
釋放對象,如代碼所示;
public class XXX
{
public void DoThis()
{
IFeatureCursor featureCursor;
//...fill the cursor with features;
IFeature feature = null;
while ((feature = featureCursor.NextFeature)!= null)
{
//Do my stuff with the feature
Marshal.ReleaseComObject(feature);
}
}
}
它工作時,我用真實的一個featurecursor和功能,但是當我嘲笑功能的單元測試,我得到一個錯誤:
"System.ArgumentException : The object's type must be __ComObject or derived from __ComObject."
但是我怎麼申請這個我莫克目的?
漂亮!!非常感謝你。我爲什麼不考慮製作MarshalWrapper?我在我的代碼中包含了其他所有內容:-) – Morten