iOS で UI テストを実行するときにアセンブリを交換またはパッチすることは可能ですか? 現在、私は Typhoon フレームワークをセットアップしたプロジェクトを持っており、このようなアセンブリにパッチを当てることができます
var controller: HomeViewController!
override func setUp() {
super.setUp()
// setup assemblies
var blAssembly = BusinessLogicAssembly()
var ctrlAssembly = AppAssembly()
// setup patcher
let patcher = TyphoonPatcher()
patcher.patchDefinitionWithSelector("testManager", withObject: {return FakeManager()})
patcher.patchDefinition(blAssembly.testManager() as TyphoonDefinition, withObject: {
return FakeManager()})
let factory = TyphoonBlockComponentFactory(assemblies: [blAssembly, ctrlAssembly])
factory.attachPostProcessor(patcher)
// get controller
controller = factory.componentForKey("homeViewController") as HomeViewController
// force view to laod
let vcView = controller.view
}
そして、これはうまく機能しています。TestManager
にスタブをパッチします。ただし、この場合、View Controller を手動で呼び出しています。UI テスト (アプリの起動時にコントローラーがバックグラウンドで処理される) を実行するときに、アセンブリにパッチを適用してモック/スタブを提供する方法はありますか?
たとえば、Web サービスを呼び出すビュー コントローラーがあるとします。Web サービス ロジックは別のクラスにラップされ、TyphoonAssembly
. UI テストでは、実際の Web サービスにアクセスするのではなく、サンプル データを証明しただけです。Web サービス クラスのスタブを作成し、テスト データを返すことで、これを行うことを想像しています。私はそれを行うことができなかったか、どこにも例を見つけることができなかったため、台風フレームワークでこれを達成できますか。
私はSwiftを使用していますが、Objective-Cの回答も機能します(互換性がある限り)