2
我在寫XCTest並用颱風注入模擬依賴。用颱風注入模擬
這裏是我的ViewController
代碼:
- (instancetype)init {
self = [super init];
MDMainAssembly *assembly = (MDMainAssembly *) [TyphoonComponentFactory defaultFactory];
self.alertManager = [assembly alertManager];
return self;
}
這裏是我正在努力改變注:
self.mockedAlertManager = mock([MDAlertManager class]);
MDMainAssembly *assembly = [MDMainAssembly assembly];
TyphoonComponentFactory *factory = [TyphoonBlockComponentFactory factoryWithAssembly:assembly];
TyphoonPatcher *patcher = [[TyphoonPatcher alloc] init];
[patcher patchDefinition:[assembly alertManager] withObject:^id {
return self.mockedAlertManager;
}];
[factory attachPostProcessor:patcher];
但是測試失敗了,因爲這個工廠不能設置爲默認值。我配置在AppDelegate
工廠:
TyphoonComponentFactory *factory = [[TyphoonBlockComponentFactory alloc] initWithAssemblies:@[
[MDMainAssembly assembly],
]];
[factory makeDefault];
如何擺脫這種情況?
但我的視圖控制器將如何訪問配置的工廠或我應該也將控制器實例化到工廠? –
是的,我們建議使用Typhoon構建視圖控制器。然後,注入**當前用例**的依賴關係。但是對於下一個用例,請注入程序集:http://bit.ly/1nQce7k,然後查找下一個對象圖。或使用:http://bit.ly/1a93dFE或:http://bit.ly/1mdnpZ1。 。如果這不適合你,你想堅持defaultAssembly,或許一個更簡單的方法來模擬是提供一個setter,所以你可以注入一個模擬工廠。 。這取決於您是否需要配置的集成測試或純粹的單元測試。 –
您是否嘗試過示例應用程序? https://github.com/typhoon-framework/Typhoon-example –