jeudi 25 août 2016

in unit test, set mocked value to an argument pass-by-reference

I have a method:

-(void)startTaskForResult:(long long*)result {
  ...
}

The function I want to unit test invoke above function:

-(void)doWork {
 long long result = 0;
 [self startTaskForResult:&result];
}

I am using OCMock library to do unit tests. In my test case, I want to set the result argument to an mocked value e.g. 100 without care about the actual implementation of -(void)startTaskForResult:(long long*)result.

I tried the following way:

-(void)testDoWork{
// try to set 100 to argument 'result'
OCMStub([classToTest startTaskForResult:[OCMArg setToValue:OCMOCK_VALUE((long long){100})]]);
// run the function, but it doesn't use mocked value 100 for argument 'result'
[classToTest doWork];
...
}

But, when I run my test, it does't use the mocked value 100 for argument result. What is the right way to set mocked value to argument in my case then?

Aucun commentaire:

Enregistrer un commentaire