Übergeben eines OCMock-Objekts an eine Methode, bei der die Funktion isKindOfClass aufruft. Beim Komponententest ist der zurückgegebene Wert jedoch nicht der Mocked-Klasse, aber OCMockObjectWie bekomme ich den Mock-Wert beim Aufruf von isKindOfClass für ein OCMock-Objekt?
Antwort
Wenn Sie OCMock-Objekt an eine Methode übergeben möchten, bei der die Funktion isKindOfClass aufruft, müssen Sie einen partiellen Schein erstellen. Der folgende Code könnte Ihnen helfen. Es hat für mich funktioniert.
-(void)testMyTest
{
FirstViewController* masterVC = [[FirstViewController alloc]init];
SecondViewController *second = [[SecondViewController alloc] init];
id master = [OCMockObject partialMockForObject:second];
[[master expect] getName:@"PARAM"];
[masterVC doSomething:master];
[master verify];
[masterVC release];
[second release];
}
doSomething Methode innerhalb FirstViewController
-(void)doSomething:(SecondViewController *)detail
{
if ([detail isKindOfClass:[SecondViewController class]])
{
NSString * returnVal = [detail getName:@"PARAM"];
NSLog(@"returnVal %@",returnVal);
}
}
Eine weitere Alternative ist die isKindOfClass Methode spöttisch, also der Testfall wird
- (void)testMyTest
{
CalculatorViewController* masterVC = [[CalculatorViewController alloc]init];
id master = [OCMockObject niceMockForClass:[SecondViewController class]];
BOOL ret = YES;
[[[master expect] andReturnValue:OCMOCK_VALUE(ret)] isKindOfClass:[SecondViewController class]];
[[master expect] getName:@"PARAM"];
[masterVC doSomething:master];
[master verify];
}
Der Vorteil von mock/niceMock besteht darin, dass Sie das Objekt nicht instanziieren müssen. In meinem Fall ist das Erstellen dieses Objekts schwierig. – Giuseppe
ok. Eine Alternative ist das Mocking der isKindOfClass-Methode. etwas wie diese ID Master = [OCMockObject niceMockForClass: [SecondViewController-Klasse]]; BOOL ret = JA; // kann den Wert ändern [[[master expect] undReturnValue: OCMOCK_VALUE (ret)] isKindOfClass: [SecondViewController-Klasse]]; –
Was ich tue ist, eine niceMock zu verwenden und die Methode "class" zu stubben, um die mokierte Klasse zurückzugeben. Dies ist zuverlässiger, um einfach JA für jede artOfClass zurückzugeben. Warum dies nicht das Standardverhalten von OCMock ist, ist für mich unklar. – Giuseppe
Hier wird ein ganzer Artikel erklärt, wie genau zu schreiben die OCMock isKindOfClass
Methode (es ist nicht standardmäßig vorhanden) und wie man es benutzt: http://blog.carbonfive.com/2009/02/17/custom-constraints-for-ocmock/
- 1. DWScript: Wie bekomme ich Ergebnis nach Aufruf
- 2. Speicherfehler beim Aufruf von
- 3. Warum bekomme ich den Fehler "Kann das Passwort nicht aktualisieren" beim Aufruf von AzMan?
- 4. Wie bekomme ich ein Passwort für sudo?
- 5. Wie bekomme ich den Wert von @DiscriminatorColumn()?
- 6. Wie bekomme ich den vollständigen Pfad für ein Befehlszeilenargument für Dateinamen?
- 7. wird ein Mutex beim Aufruf von notify für eine Bedingungsvariable
- 8. Wie bekomme ich OriginingClientIPAddress von den Headern?
- 9. Wie verwende ich den Template-Wert beim Aufruf der Funktion?
- 10. Wie bekomme ich den Quellcode von Chromium für Android
- 11. Wie bekomme ich Echtzeit für ein Spiel
- 12. Wie bekomme ich ein Objekt von RuntimePropertyInfo?
- 13. Wie bekomme ich den Attributsatznamen?
- 14. Best Practices für den Aufruf von intuit.ipp.anywhere.setup()?
- 15. Wie bekomme ich den Routennamen von RouteData?
- 16. Wie bekomme ich den Wert von Spinner
- 17. Wie bekomme ich den Hostnamen von Crossbar.io?
- 18. Wie bekomme ich den Wert von @QueryParam
- 19. Wie bekomme ich den Div-Positionswert beim Scrollen?
- 20. Wie bekomme ich ein Dateiobjekt von mkstemp()?
- 21. Wie bekomme ich ein Hintergrundbild von UITableViewStyleGrouped für eine UIView?
- 22. Wie bekomme ich ein Array von DB
- 23. Wie bekomme ich den Montageort?
- 24. Wie bekomme ich den Druckerstatus?
- 25. Wie bekomme ich ein Formular von MainWindowHandle?
- 26. NSManagedObject schlägt fehl IsKindOfClass-Test
- 27. Wie bekomme ich den Standort?
- 28. Wie bekomme ich den Downloadstatus?
- 29. Fehler: Keine passende Funktion für den Aufruf von GeoDataPlacemark :: setStyle
- 30. ActivityNotFoundException beim Aufruf von Intent.ACTION_CALL
OCMockObject scheint die Basisklasse für dieses Framework zu sein. Rufen Sie + (id) mockForClass: Class auf und fragen Sie sich, warum sich das erstellte Objekt nicht selbst als die mokierte Klasse meldet? – JiuJitsuCoder
Wenn Sie dieses Problem immer noch haben, können Sie Ihren Anwendungsfall vorstellen? Was versuchst du zu machen? Irgendein Code würde der Analyse helfen. –
Es kann für jede Fabrikklasse nützlich sein, die Objekte abhängig von der Klasse eines Parameters erstellt. In meinem Fall muss ich reale Objekte erstellen, anstatt diese Fabriken zu testen. – Giuseppe