标签: ochamcrest

一些验证涉及块方法和OCMockito

我正在使用OCMockito,我想在我的ViewController中测试一个使用NetworkFetcher对象和块的方法:

- (void)reloadTableViewContents
{
    [self.networkFetcher fetchInfo:^(NSArray *result, BOOL success) {
        if (success) {
            self.model = result;
            [self.tableView reloadData];
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

特别是,我想要模拟,fetchInfo:以便它返回一个虚拟result数组而不会访问网络,并验证该reloadData方法是否被调用,UITableView并且模型应该是它应该是什么.

由于此代码是异步的,我假设我应该以某种方式捕获块并从我的测试中手动调用它.

我怎么能做到这一点?

unit-testing ios ocmockito ochamcrest

6
推荐指数
2
解决办法
857
查看次数

使用OCMockito验证方法调用

我在ClassA中有这两种方法

-(IBAction)onSubmit;
-(void)validateName:(NSString*)name;
Run Code Online (Sandbox Code Playgroud)

@implementation

- (IBAction)onSubmit {
    [self validateName:self.textfield.text];
}

-(void)validateName:(NSString*)name{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

我的测试如下所示:

//given
ClassA *classA = mock([ClassA class]);
classA.textfield.text = @"Foo";

// when 
[classA onSubmit];

[verify(classA) validateName:@"Foo"];
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我一直在:

Expected 1 matching invocation, but received 0
Run Code Online (Sandbox Code Playgroud)

在调用onSubmit时,如何编写验证validateName是否已执行的测试.

unit-testing ios ocmockito ochamcrest

2
推荐指数
1
解决办法
1000
查看次数

比较[类]不起作用?

我有一个单元测试:

- (void)testFetchTrackByTrackIdIsATrack
{
    [self addTrackWithSongId:@"123"];
    Track *fetchedTrack = [self.library trackByTrackId:@"123"];
    assertThat(fetchedTrack, instanceOf([Track class]));
}
Run Code Online (Sandbox Code Playgroud)

哪个失败了:

file:///Users/elliot/Development/Hark/HarkTests/TestLibrary.m: test failure:
-[TestLibrary testFetchTrackByTrackIdIsATrack] failed: Expected an instance
of Track, but was Track instance <Track: 0x6180001077d0>
Run Code Online (Sandbox Code Playgroud)

我有几个其他测试使用相同的实例检查不同的类工作 - 但我无法锻炼为什么这不起作用.深入研究:

- (void)testFetchTrackByTrackIdIsATrack
{
    [self addTrackWithSongId:@"123"];
    Track *fetchedTrack = [self.library trackByTrackId:@"123"];
    Class c1 = [fetchedTrack class];
    Class c2 = [Track class];
}
Run Code Online (Sandbox Code Playgroud)

调试器报告:

c1  Class   Track           0x0000000100012fe0
c2  Class   0x1000b3eb8     0x00000001000b3eb8
Run Code Online (Sandbox Code Playgroud)

注意它怎么看不到那[Track class]是一类Track?当我将这个相同的逻辑应用于其他传递的单元测试时,它们都会报告正确的类名.

感觉它在运行时没有类元数据,但为什么呢?

还有一些案例:

assertTrue(c1 == c2);                                   // FAIL
assertThat([fetchedTrack …
Run Code Online (Sandbox Code Playgroud)

unit-testing introspection objective-c ochamcrest

0
推荐指数
1
解决办法
184
查看次数