我正在尝试从程序集(或其他程序集)内修补程序集。

https://github.com/appsquickly/Typhoon/wiki/Integration-Testing#patching-out-a-component中描述的方法可以完美地工作,但是当在多个应用程序中重用相同的程序集并尝试仅修补某些方面时,该方法有点复杂。我知道我可以模块化我的程序集结构来完成此工作,但是对于所有未修补的定义,我会重复自己一遍。子类化可能是另一种选择,但是我需要对许多定义进行子类化,而只是为了改变一个方面。

简而言之:我正在尝试将其移入我的程序集中:

MiddleAgesAssembly* assembly = [[MiddleAgesAssembly assembly] activate];
TyphoonPatcher* patcher = [[TyphoonPatcher alloc] init];

[patcher patchDefinitionWithSelector:@selector(knight) withObject:^id{
  return [assembly anotherKnight];

}];

[assembly attachPostProcessor:patcher];

一种可能的解决方案(我尚未尝试过)可能是创建自己的TyphoonDefinitionPostProcessor实现。但是,在失去执行力之前,我想问一下,是否有人可以针对一般问题找到合适的解决方案。

我们希望了解更多的解决方法,但我想知道是否有可能从另一个程序集中修补该程序集。

谢谢马丁

最佳答案

无法从另一个程序集修补一个程序集-目前尚不支持此功能。

但是,如果要创建可重用的部件并仅修补某些零件,则可以创建一个子类,该子类仅覆盖您要向客户提供的零件。

假设您有一个带有协作程序集的顶级程序集,如下所示:

@interface MiddleAgesAssembly : TyphoonAssembly

@property(strong, nonatomic, readonly) QuestProvider *questProvider;

@end

激活装配时,您可以指定任何将覆盖基本装配的装配,如下所示:
[MyAssembly new] activateWithCollaboratingAssemblies:@[HolyGrailQuestProvider new]];
//HolyGrailQuestProvider will act in place of the base quest provider

10-08 12:27