0

そのため、テストなどの使用方法を学習する、よりテスト主導の方法で開発を開始しようとしています。そのため、すでに厄介な問題に遭遇しています。

NSArray を渡してから、公開された UIScrollview サブビューの 3 番目のインデックス (最初の 2 つはスクロール インセットのデフォルト) を有効な画像を含む UIImageView に設定する関数をテストしたいと思います。

渡す配列は、メソッドが画像を引き出す ALAsset 型になります。しかし、私はそこまで行っていません。

したがって、私の最初の問題は... UIImage をモックして有効にすることはできますか?つまり、このシナリオでは nil ではありませんか? または、テストの作成方法を変える必要がありますか?

これまでのところ、これは私が試したことです

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);
4

1 に答える 1

2

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]]
于 2015-02-24T04:10:19.083 に答える