Модульное тестирование с помощью OCMockito mocking UIImage

Поэтому я пытаюсь начать разработку в более управляемой тестами манере, учась использовать тесты и тому подобное, и поэтому я уже столкнулся с неприятной проблемой.

Я хотел бы проверить, что функция, которую я передаю NSArray, чтобы затем установить открытый индекс третьего представления подпредставления UIScrollview (первые два по умолчанию для вставок прокрутки), чтобы быть UIImageView, который содержит допустимое изображение.

Массив, который я передаю, будет иметь тип ALAsset, который метод будет вытягивать из изображения. Но я не зашел так далеко.

Итак, моя первая проблема... Могу ли я смоделировать UIImage, чтобы быть действительным, т.е. не ноль в этом сценарии? или как я пишу мои тесты подходить по-другому?

пока это то, что я пытался

UIImage *mockImage = mock([UIImage class]);
UIImageView *imgView = [[UIImageView alloc]init];

[imgView setImage:mockImage];
NSArray *assets = @[imgView];
[SUT loadImagesForAssets:assets];

NSInteger firstViewIndexOddset = 2;
NSInteger idx = 0;

idx += firstViewIndexOddset;

UIImageView *imgViewFromSUT = [[SUT previewScrollView] subviews][idx];

XCTAssertNotNil(imgViewFromSUT.image);

1 ответ

Решение

Не поддавайтесь на притворные рамки объектов, даже на OCMockito. Когда вы впервые начинаете с тестов, я рекомендую не использовать какие-либо насмешливые рамки. Вместо этого, сделай все сам. После того, как вы устали набирать подобные вещи снова и снова, посмотрите, поможет ли имитация фреймворка.

Когда я хочу тест, который использует действительный UIImage, я использую это:

@implementation TestingImageData

+ (NSData *)validImageData
{
    const char PNGbytes[] = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00"
        "\x00\x00\x01\x00\x00\x00\x01\x01\x03\x00\x00\x00\x25\xDB\x56\xCA\x00\x00\x00\x03\x50\x4C"
        "\x54\x45\x00\x00\x00\xA7\x7A\x3D\xDA\x00\x00\x00\x01\x74\x52\x4E\x53\x00\x40\xE6\xD8\x66"
        "\x00\x00\x00\x0A\x49\x44\x41\x54\x08\xD7\x63\x60\x00\x00\x00\x02\x00\x01\xE2\x21\xBC\x33"
        "\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82"; // 1x1 transparent pixel PNG
    size_t PNGlength = sizeof(PNGbytes) - 1;
    return [NSData dataWithBytes:PNGbytes length:PNGlength];
}

@end

Например:

[UIImage imageWithData:[TestingImageData validImageData]]
Другие вопросы по тегам