EXC_BAD_ACCESS podczas uzyskiwania dostępu do parametrów w andDo OCMock

Próbuję napisać blok kodu za pomocą kodu pośredniczącego OCMocki robić metoda.

W tym przypadku testowana jest klasa rozszerzenia UIImageView. Chcę sprawdzić, czy połączenia z numerem wewnętrznym[self setImage:] z parametrem, który nie jest zerowy (później zostanie użyte inne porównanie obrazu).

Podczas korzystania z OCMock'si robić metoda, test ulega awarii z EXC_BAD_ACCESS po zakończeniu bloku.

id mockView = [OCMockObject mockForClass:[UIImageView class]];
[[[mockView stub] andDo:^(NSInvocation *invocation)
  {
      UIImage *img;
      [invocation getArgument:&img atIndex:2]; <---- line causing the exception
      somebodySetImage |= (img != nil);

  }] setImage:OCMOCK_ANY];

  [mockView do_something_that_calls_setImage];

Jedyne rozwiązanie, które znalazłem na razie, wykorzystujei zadzwoń zamiasti robić, ale to komplikuje test.

Czy mogę uniknąć zderzenia zi robić?

AKTUALIZACJA Cóż, postaram się podać tutaj lepszy przykład: oto nowy fragment kodu testowego:

- (void)testDownloadingThumbnail
{
    PInfo *_sut = [[PInfo alloc] init];

    __block id target = nil;

    id mock = [OCMockObject mockForClass:[NSOperationQueue class]];

    [[[mock expect] andDo:^(NSInvocation *inv)
    {
        NSInvocationOperation *op;
        [inv getArgument:&op atIndex:2];
        target = [[op invocation] target]; /* replacing this line with STAssert does not help either */
    }] addOperation:OCMOCK_ANY];

    [_sut setDownloadQueue:mock];
    [_sut startDownloadingImagesAsync:YES];

    [mock verify];

    STAssertEqualObjects(target, _sut, @"invalid op target");
}

Oto testowany kod (pojedyncza metoda z PInfo):

- (void)startDownloadingImagesAsync:(bool)isThumbnailImg
{
    NSInvocationOperation *inv;

    inv = [[NSInvocationOperation alloc] initWithTarget:self
                                     selector:@selector(loadThumbnailWorker:)
                                       object:nil];
    [[self downloadQueue] addOperation:inv];
}

Kod nadal ulega awarii po wyjściu zstartDownloadingImagesAsync z EXC_BAD_ACCESS. Jeśli dodam punkt przerwania wewnątrzi robić Blok, widzę, że kontrolka osiąga ten punkt i pobiera prawidłowe obiekty przezgetArgument.

Ale jeśli użyjęgetArgument wewnątrz bloku rozbija wszystko, co próbuję zrobić.

P.S. Dzięki za pomoc.

questionAnswers(3)

yourAnswerToTheQuestion