我試圖嘲弄的Autofac解決方法,如嘲諷Autofac的「決心」擴展與TypeMock
using System;
using Autofac;
using TypeMock.ArrangeActAssert;
class Program
{
static void Main(string[] args)
{
var inst = Isolate.Fake.Instance<IContainer>();
Isolate.Fake.StaticMethods(typeof(ResolutionExtensions), Members.ReturnNulls);
Isolate.WhenCalled(() => inst.Resolve<IRubber>()).WillReturn(new BubbleGum());
Console.Out.WriteLine(inst.Resolve<IRubber>());
}
}
public interface IRubber
{}
public class BubbleGum : IRubber
{}
從起訂量的到來,從TypeMock語法和異常迷惑了我很多。最初在TestMethod中運行它後,我不斷得到一個異常,類似於「WhenCalled無法在沒有補充行爲的情況下運行」。我嘗試爲每個人和他們的母親定義行爲,但無濟於事。
然後我調試通過測試運行,看到一個實際的例外是從Autofac發起的:IRubber尚未註冊。
所以很明顯,靜態的Resolve函數並沒有被僞造,我不能讓它被僞造,不管我怎麼去鉤住它。
Isolate.WhenCalled(() => ResolutionExtensions.Resolve<IRubber>(null)).WillReturn(new BubbleGum());
...從Autofac引發異常,抱怨IComponentContext不能爲null。餵它大概假冒的IContainer(或僞造IComponentContext代替)讓我回到「IRubber未註冊」的錯誤。
雖然你會如何模仿擁有? –
2011-09-08 17:52:54
當你需要的時候,可以把'擁有的'看作是'List '或'string'這樣的基本類型 - 使用它的構造函數構造'擁有的'的值,可能傳遞一個' T'實例。希望這可以幫助。 –
2011-09-08 20:36:37
對於擁有的類的lifeTime ctor參數,僅通過IDisposable的模擬是否正確?那個參數應該真正的通過什麼?謝謝! –
2011-09-15 14:51:12