1

在 Typhoon 文档中,它向您展示了如何修补组件以执行集成测试

示例如下:

TyphoonPatcher* patcher = [[TyphoonPatcher alloc] init];
[patcher patchDefinition:[assembly knight] withObject:...];

该行[patcher patchDefinition:[assembly knight] withObject:...];不为我输入检查:

Parameter type mismatch: Interface 'Knight' is not a successor of 'TyphoonDefinition'

这很有意义,因为knight定义如下:

@interface MiddleAgesAssembly : TyphoonAssembly
- (Knight*)knight;   // Returns a TyphoonDefinition, actually.
... 
@end

...返回类型绝对不是TyphoonDefinition.

我不确定这是否是因为

  1. 这是Typhoon的故意设计,文档已经过时
  2. 我做错了什么。

ps谁编了这些例子……太可怕了!

4

1 回答 1

1

这是 Typhoon API 中的一个疏忽。事实上,修补方法将被弃用,取而代之的是:

[patcher patchDefinitionWithSelector:@selector(myController) withObject:^id{
   return myFakeController;
}];

此答案概述了弃用该方法的原因。我们将修复类型问题,但该方法将被完全弃用。

至于例子:它们是从一个名叫 Adlard Humfridus 的僧侣所写的关于依赖注入的开创性 12 世纪文本中借来的。这是一部非常凄美和感人的作品——当骑士用电锯修补他的剑时,我哭了,毕竟能够救出少女。不幸的是,从原始拉丁文的翻译中丢失了一些更精细的细节。

于 2014-08-05T00:26:37.033 回答