Kiwi で UICollectionViewFlowLayout サブクラスをテストする必要があります。
UICollectionView のデリゲートと dataSource を正しくモックアップしましたが、まだいくつかの問題があります。
の指定されたアイテム サイズではCGSize(200.0f, 200.0f)、画面上に 5 つのアイテムを取得する必要がありますが、何らかの理由で最後の行で返される属性配列が 10 個の属性を返すため、10 個の可視セルがあることを意味します。
ここで何が起こっているのでしょうか?レイアウトが期待どおりに機能する場合、画面には常に 5 つの要素が表示されます。
これは私がこれまでに持っていたものです(コメントを読んでください)。ほとんどの場合は機能します。
describe(@"LineLayout", ^{
    __block UICollectionView *collectionView;
    __block HICollectionViewLineLayout *layout;
    __block const CGRect windowFrame = CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f);
    __block const CGSize itemSize = CGSizeMake(200.0f, 200.0f);
    // Create a Collection View that uses a LineLayout and set the datasource delegate
    // before each test
    beforeEach(^{
        layout = [[HICollectionViewLineLayout alloc] init];
        collectionView = [[UICollectionView alloc] initWithFrame:windowFrame collectionViewLayout:layout];
        // Mock the UILineLayout data source
        id delegateMock = [KWMock mockForProtocol:@protocol(UICollectionViewDelegateFlowLayout)];
        [[delegateMock should] conformToProtocol:@protocol(UICollectionViewDelegateFlowLayout)];
        [delegateMock stub:@selector(collectionView:layout:sizeForItemAtIndexPath:) andReturn:theValue(itemSize)];
        [delegateMock stub:@selector(collectionView:layout:insetForItemAtIndex:) andReturn:theValue(UIEdgeInsetsZero)];
        // Mock the UICollection View dataSource
        id dataSourceMock = [KWMock mockForProtocol:@protocol(UICollectionViewDataSource)];
        [[dataSourceMock should] conformToProtocol:@protocol(UICollectionViewDataSource)];
        [dataSourceMock stub:@selector(numberOfSectionsInCollectionView:) andReturn:theValue(1)];
        [dataSourceMock stub:@selector(collectionView:numberOfItemsInSection:) andReturn:theValue(10)];
        // Set the delegate and the data source
        collectionView.delegate = delegateMock;
        collectionView.dataSource = dataSourceMock;
        // Reload the collectionView Data
        [collectionView reloadData];
    });
    it(@"Should properly identify central element when cell number is not even", ^{
        NSArray *attributes = [layout layoutAttributesForElementsInRect:windowFrame];
        // test that [attributes count] == 5
    });
これは、テストなしでアプリを実行したときに表示されるものです。
