Comment puis-je utiliser des objects OCMock avec du code qui appelle isKindOfClass?

Je voudrais tester du code avec OCMock.

Les entrailles du code appellent [NSObject isKindOfClass] sur l'object [NSObject isKindOfClass] que je fournis au code, comme ceci:

 if ([object isKindOfClass:[FancyClass class]]) { ...} 

Cependant, lorsque je fournis un mock basé sur OCMockObject créé comme ceci:

 mock = [OCMockObject mockForClass:[FancyClass class]]; 

il semble qu'il ne passe pas le test isKindOfClass .

Aucune suggestion?

La règle générale est que si vous appelez isKindOfClass: et que vous ne transmettez pas l'une des classs Plist (par exemple, NSSsortingng ou NSNumber), vous le faites mal.

Si la méthode fait deux choses ou plus en fonction de la class de son argument, déchiffrez-la en plusieurs methods et testez chaque méthode séparément.

Si la méthode ne fait qu'une chose, mais doit interagir différemment avec l'object selon la class, alors:

  1. Faire un protocole. (Les protocoles dans Obj-C sont appelés "interfaces" dans d'autres langages OO, tels que Java.)
  2. Faites en sorte que les nombreuses classs soient toutes conforms au protocole. Si nécessaire, utilisez des catégories pour append les methods nécessaires de l'extérieur.
  3. Faire vérifier la conformité de la méthode testée au protocole, à la place de l'actuelle isKindOfClass: check.
  4. Faites en sorte que la méthode testée utilise les methods du protocole.

Qu'en est-il de:

  [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];