Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用Kiwi测试UICollectionViewLayout?_Ios_Unit Testing_Bdd_Kiwi - Fatal编程技术网

Ios 如何使用Kiwi测试UICollectionViewLayout?

Ios 如何使用Kiwi测试UICollectionViewLayout?,ios,unit-testing,bdd,kiwi,Ios,Unit Testing,Bdd,Kiwi,我需要用Kiwi测试UICollectionViewFlowLayout子类 我已经为UICollectionView正确地模拟了委托和数据源,但仍然存在一些问题 使用指定的项目大小CGSize(200.0f,200.0f),我应该在屏幕上获得5个项目,但由于某些原因,在最后一行返回的属性数组确实返回10个属性,这意味着有10个可见单元格 这到底是怎么回事?如果我的布局按预期工作,屏幕上始终有5个元素: 这就是我到目前为止所做的(阅读评论),而且它基本上是有效的 describe(@"LineL

我需要用Kiwi测试UICollectionViewFlowLayout子类

我已经为UICollectionView正确地模拟了委托和数据源,但仍然存在一些问题

使用指定的项目大小
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
    });
这是我在没有测试的情况下运行应用时看到的:


我尝试使用
UICollectionView
s的
visibleCells
属性,但没有成功。它总是空的。