Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Objective c OCMock-如何期望nsarray的内容_Objective C_Ocmock - Fatal编程技术网

Objective c OCMock-如何期望nsarray的内容

Objective c OCMock-如何期望nsarray的内容,objective-c,ocmock,Objective C,Ocmock,我想测试我在数据库中插入的值是否发送回我的类的委托 我试图模拟委托,并期望使用用于填充数据库的数组。它失败是因为2个NSArray具有相同的内容,但是不同的对象 我尝试在我的模型上实现isequal和hash方法,但没有成功 以下是错误日志: 'OCMockObject[NewsListViewController]: unexpected method invoked: service:<RSSService-0x4c25b90-324400011.636966: 0x4c25b90&g

我想测试我在数据库中插入的值是否发送回我的类的委托

我试图模拟委托,并期望使用用于填充数据库的数组。它失败是因为2个NSArray具有相同的内容,但是不同的对象

我尝试在我的模型上实现isequal和hash方法,但没有成功

以下是错误日志:

'OCMockObject[NewsListViewController]: unexpected method invoked: service:<RSSService-0x4c25b90-324400011.636966: 0x4c25b90> didFinishParsingRSSWithItems:(
    description102362,
    description102362,
    description102362,
    description102362,
    description102362
) 
    expected:   service:<OCMAnyConstraint: 0x4c10f30> didFinishParsingRSSWithItems:(
    description102362,
    description102362,
    description102362,
    description102362,
    description102362
)'
下面是我正在测试的方法:

- (void) loadAllArticles {
    NSArray *articles = [self articlesFromDatabase];
    [self.delegate service:self didFinishParsingRSSWithItems:articles];
}
谢谢你的帮助,
Vincent

这两个数组是否可能具有相同的内容但不同的地址?可能尝试与
isEqualToArray

[[mockDelegate expect] service:[OCMArg any]
  didFinishParsingRSSWithItems:[OCMArg checkWithSelector:@selector(isEqualToArray:)
                                                onObject:expectedArray]]

这两个数组是否可能具有相同的内容但地址不同?可能尝试与
isEqualToArray

[[mockDelegate expect] service:[OCMArg any]
  didFinishParsingRSSWithItems:[OCMArg checkWithSelector:@selector(isEqualToArray:)
                                                onObject:expectedArray]]
快!它提供了一组匹配器,这些匹配器与OCMock一起工作,可以进行更干净的测试。以下是您的期望:

[[mockDelegate expect] service:[OCMArg any] didFinishParsingRSSWithItems:contains(article1, article2, article3, article4, article5, nil)];
// or, if order is unpredictable
[[mockDelegate expect] service:[OCMArg any] didFinishParsingRSSWithItems:containsInAnyOrder(article1, article2, article3, article4, article5, nil)];
如果出于某种原因确实不想使用hamcrest,可以在测试类中创建一个方法来评估articles数组。但我觉得有点难看:

- (void) testServiceShouldNotLoadArticlesFromRSSFeedIfArticlesInDatabase {
    NSArray *fakeArticles = [TestUtils createArticles:5];
    [[DatabaseManager sharedManager] saveArticles:fakeArticles];

    RSSService *mockService = [OCMockObject partialMockForObject:service];
    id mockDelegate = [OCMockObject mockForClass:NewsListViewController.class];
    [[[mockDelegate stub] andCall:@selector(service:verifyFiveArticles:) onObject:self] service:[OCMArg any] didFinishParsingRSSWithItems:[OCMArg any]];
    mockService.delegate = mockDelegate;

    [mockService loadAllArticles];
    [mockService verify];
    [mockDelegate verify];
}

-(void)service:(id)service verifyFiveArticles:(NSArray *)articles {
    STAssertEquals(5, [articles count]);
}
快!它提供了一组匹配器,这些匹配器与OCMock一起工作,可以进行更干净的测试。以下是您的期望:

[[mockDelegate expect] service:[OCMArg any] didFinishParsingRSSWithItems:contains(article1, article2, article3, article4, article5, nil)];
// or, if order is unpredictable
[[mockDelegate expect] service:[OCMArg any] didFinishParsingRSSWithItems:containsInAnyOrder(article1, article2, article3, article4, article5, nil)];
如果出于某种原因确实不想使用hamcrest,可以在测试类中创建一个方法来评估articles数组。但我觉得有点难看:

- (void) testServiceShouldNotLoadArticlesFromRSSFeedIfArticlesInDatabase {
    NSArray *fakeArticles = [TestUtils createArticles:5];
    [[DatabaseManager sharedManager] saveArticles:fakeArticles];

    RSSService *mockService = [OCMockObject partialMockForObject:service];
    id mockDelegate = [OCMockObject mockForClass:NewsListViewController.class];
    [[[mockDelegate stub] andCall:@selector(service:verifyFiveArticles:) onObject:self] service:[OCMArg any] didFinishParsingRSSWithItems:[OCMArg any]];
    mockService.delegate = mockDelegate;

    [mockService loadAllArticles];
    [mockService verify];
    [mockDelegate verify];
}

-(void)service:(id)service verifyFiveArticles:(NSArray *)articles {
    STAssertEquals(5, [articles count]);
}

它应该做什么?我在构建时收到一条警告:“警告:语义问题:不兼容的指针类型将“id*”发送到类型为“NSArray*”的参数,并在运行时发生崩溃:原因:'-[\uu NSArrayM pointerValue]:未识别的选择器发送到实例0x6242960'我更新了答案-改为尝试此方法。第一篇文章肯定不正确,它应该做什么?我在构建时收到一条警告:“警告:语义问题:不兼容的指针类型将“id*”发送到类型为“NSArray*”的参数,并在运行时发生崩溃:原因:'-[\uu NSArrayM pointerValue]:未识别的选择器发送到实例0x6242960'我更新了答案-改为尝试此方法。第一篇帖子绝对不正确。