Passare un oggetto OCMock a un metodo in cui la funzione chiama èKindOfClass. Tuttavia per il test unitario, il valore restituito non è della classe derisa, ma OCMockObjectCome ottenere il valore deriso quando si chiama isKindOfClass per un oggetto OCMock?
risposta
Se si desidera passare OCMock a un metodo in cui la funzione chiama isKindOfClass, è necessario creare una simulazione parziale. Il seguente codice potrebbe aiutarti. Ha funzionato per me.
-(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];
}
metodo doSomething all'interno FirstViewController
-(void)doSomething:(SecondViewController *)detail
{
if ([detail isKindOfClass:[SecondViewController class]])
{
NSString * returnVal = [detail getName:@"PARAM"];
NSLog(@"returnVal %@",returnVal);
}
}
Un'altra alternativa sta prendendo in giro il metodo isKindOfClass, Così il banco di prova sarà
- (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];
}
Il vantaggio dell'utilizzo di un mock/niceMock è che non è necessario creare un'istanza dell'oggetto. Nel mio caso la creazione di quell'oggetto è difficile. – Giuseppe
ok. Un'alternativa è prendere in giro il metodo isKindOfClass. qualcosa come questo id master = [OCMockObject niceMockForClass: [SecondViewController class]]; BOOL ret = YES; // può cambiare il valore [[[master expect] andReturnValue: OCMOCK_VALUE (ret)] isKindOfClass: [SecondViewController class]]; –
Quello che faccio è usare un niceMock e stubare il metodo "class" per restituire la classe derisa. Questo è più affidabile per restituire SÌ per qualsiasi tipo di classe. Perché questo non è il comportamento predefinito di OCMock non è chiaro per me. – Giuseppe
Ecco un intero articolo che spiega come esattamente per scrivere il metodo OCMock isKindOfClass
(non esiste per impostazione predefinita) e come usarlo: http://blog.carbonfive.com/2009/02/17/custom-constraints-for-ocmock/
- 1. NullReferenceException quando si chiama il metodo asincrono dell'oggetto deriso
- 2. EasyMock: deriso oggetto chiama metodo effettivo
- 3. Come si passano i parametri per riferimento quando si chiama un metodo statico utilizzando la riflessione?
- 4. come si chiama un metodo di un oggetto non fittizio?
- 5. dove ottenere l'id del record quando si chiama backbone.js destroy
- 6. Come si chiama quando si esegue l'override di un metodo mentre si chiama un costruttore?
- 7. Come gestire il messaggio "ACAccountCredentialRenewResultRejected" quando si chiama renewCredentialsForAccount
- 8. NullReferenceException quando si chiama NavigationContext
- 9. Come ottenere l'ultimo valore quando si sottoscrive un Osservabile?
- 10. Come si ordina un oggetto JSON per un valore nidificato?
- 11. Come si deride un oggetto con OCMock che non viene passato come parametro al metodo?
- 12. Quando si chiama una funzione Javascript, come si imposta un valore personalizzato di "this"?
- 13. In C#, cosa succede quando si chiama un metodo di estensione su un oggetto nullo?
- 14. Come ottenere il valore mappato SingularAttribute di un oggetto persistente?
- 15. nome di classe e messaggi isKindOfClass inviati a un oggetto
- 16. isKindOfClass Behavior
- 17. Perché devo eseguire il cast di un oggetto dinamico quando si chiama IEnumerable.Contains()?
- 18. Utilizzo del valore predefinito quando si chiama una funzione
- 19. Aggiungere un elemento quando si chiama "DOMNodeInserted"
- 20. ActivityNotFoundException quando si chiama Intent.ACTION_CALL
- 21. Perché un metodo "this" cambia quando si chiama un riferimento al metodo di un oggetto?
- 22. SecurityException quando si chiama getLastKnownLocation
- 23. Pandas: Ottenere l'etichetta per il valore in oggetto serie
- 24. System.IO.IOException quando si chiama System.Console.WindowWidth
- 25. Si blocca quando si chiama indexPathForCell
- 26. AngularJS - Direttiva per ottenere un valore in oggetto
- 27. Dov'è il codice chiamato quando si chiama getApplicationContext()?
- 28. Android: come ottenere il ritorno dall'attività quando si chiama da Fragment?
- 29. Got AttributeError quando si cerca di ottenere un valore per il campo 'status_code'
- 30. Android SQLiteMisuseException quando si chiama database.rawQuery
OCMockObject sembra essere la classe base per quel framework. Stai chiamando + (id) mockForClass: Class e ti stai chiedendo perché l'oggetto creato non si riporti come classe derisa? – JiuJitsuCoder
Se il problema persiste, puoi presentare il tuo caso d'uso? Cosa stai cercando di fare? Alcuni codici aiuterebbero l'analisi. –
Può essere utile per ogni classe factory che crea oggetti in base alla classe di un parametro. Nel mio caso devo creare oggetti reali invece di simulare per testare queste fabbriche. – Giuseppe