OCMock 2
id mock = [OCMockObject mockForClass:[ExtClass class]];
// We stub someMethod
BOOL returnedValue = YES;
[[[mock stub] andReturnValue:OCMOCK_VALUE(returnedValue)] someMethod];
// Here we stub the alloc class method **
[[[mock stub] andReturn:mock] alloc];
// And we stub initWithParam: passing the param we will pass to the method to test
NSString *param = @"someParam";
[[[mock stub] andReturn:mock] initWithParam:param];
// Here we call the method to test and we would do an assertion of its returned value...
[YourClassToTest foo:param];
OCMock3
// Parameter
NSURL *url = [NSURL URLWithString:@"http://testURL.com"];
// Set up the class to mock `alloc` and `init...`
id mockController = OCMClassMock([WebAuthViewController class]);
OCMStub([mockController alloc]).andReturn(mockController);
OCMStub([mockController initWithAuthenticationToken:OCMOCK_ANY authConfig:OCMOCK_ANY]).andReturn(mockController);
// Expect the method that needs to be called correctly
OCMExpect([mockController handleAuthResponseWithURL:url]);
// Call the method which does the work
[self.myClassInstance authStarted];
OCMVerifyAll(mockController);
Note
garantire che, in entrambi i casi si stub due metodi (alloc
e il metodo init...
). Inoltre, assicurati che entrambe le chiamate di stub vengano effettuate sull'istanza della classe mock (non sulla classe stessa).
Documenti: metodi di classe sezione nel Questa soluzione OCMock features
Alternative
(strano) può essere utile nel caso in cui si vogliono testare codice legacy che a causa di qualsiasi ragione non si può refactoring. Tuttavia, se è possibile modificare il codice, è necessario refactarlo e ottenere un oggetto ExtClass
come parametro, non una stringa, delegando la creazione di ExtClass
a tale metodo. Il tuo codice di produzione e test sarebbe più semplice e chiaro, specialmente in un caso di vita reale più complesso, non in questo semplice esempio.
Il tipo di restituzione del metodo è BOOL e quindi si restituisce una stringa. Potresti modificare e cambiare una di quelle cose? Immagino tu voglia restituire una stringa, ma non ne sono sicuro. – e1985
Grazie. L'ho risolto. – soguy