OCMock не заглушает метод NSBundle

С недавнего времени я использую OCMock для модульного тестирования. Мне нужно заглушить метод objectForInfoDictionaryKey: из NSBundle. Я сделал следующее:

self.bundleMock = OCMClassMock([NSBundle class]);
OCMStub([self.bundleMock objectForInfoDictionaryKey:@"GITHash"]).andReturn(@"c424242");
;

Вот вызов, который я хочу заглушить:

NSString * appHashString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"GITHash"];

Но, похоже, ничего не заглушено, во время выполнения у меня все еще есть «правильное» значение.

Что я сделал не так ?


person Loadex    schedule 13.04.2015    source источник


Ответы (1)


Я мог ошибаться, но я думаю, что вам нужно использовать partialMockForObject для имитации экземпляра, возвращаемого [NSBundle mainBundle], вместо того, чтобы имитировать класс NSBundle, потому что objectForInfoDictionaryKey — это метод экземпляра, а не метод класса.

person bplattenburg    schedule 13.04.2015
comment
Спасибо за Ваш ответ ! Я не замечал этот метод раньше! - person Loadex; 14.04.2015
comment
Итак, вместо кода в вопросе я использую что именно? - person Jeff; 24.02.2016
comment
См. документацию здесь: ocmock.org/reference/#partial-mocks. исходный код вопроса: self.bundleMock = OCMPartialMock([NSBundle mainBundle]); OCMStub([self.bundleMock objectForInfoDictionaryKey:@"GITHash"]).andReturn(@"c424242"); Это издевается над экземпляром, так что вызов метода экземпляра возвращает заглушенное возвращаемое значение. - person bplattenburg; 25.02.2016