标签: ocunit

OCUnit,NSLog和XCode 3.1

我一直在XCode 3.0中使用OCUnit(XCode附带的默认安装).我很高兴能够运行我的测试并在Build Results窗口中看到结果,以及我输出的任何NSLog()消息.

但是,使用XCode 3.1,测试运行正常,但我突然失去了我的NSLog()输出.有谁知道它去了哪里?

xcode nslog ocunit

6
推荐指数
1
解决办法
2496
查看次数

在ocUnit中比较NSArray

我是ocUnit的新手,我试图将2个数组与STAssertTrue方法进行比较,并且==表示相等.

下面的测试只是询问被测系统(sut)的数据

- (void) testParse {
  SomeClassForTesting* sut = [[SomeClassForTesting alloc] init];
  NSArray* result = [sut parseAndReturn];

  NSArray* expected = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil];

  STAssertTrue(result == expected, @"This test failed");
}
Run Code Online (Sandbox Code Playgroud)

然后在我的生产代码中,我只返回相同的数组

- (NSArray *)parseAndReturn
{
  NSArray* x = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil];
  return x;
}
Run Code Online (Sandbox Code Playgroud)

然而,当测试运行时,我失败了.我应该如何比较这些对象,看它们是否相同?

先感谢您

unit-testing objective-c ocunit

6
推荐指数
1
解决办法
554
查看次数

使用OCUnit测试是否显示UIAlertView

我正在开发一个应用程序UIAlertView,只有在游戏进度完成时才会显示一个点击它的退出按钮.我想知道如何使用OCUnit拦截UIAlertView并与之交互,甚至检测它是否已经呈现.我唯一能想到的就是monkeypatch [UIAlertViewDelegate willPresentAlertView],但这让我想哭.

有谁知道更好的方法吗?

iphone unit-testing ocunit uialertview

6
推荐指数
1
解决办法
2883
查看次数

单元测试使用通知的设计

我在测试一些使用通知的逻辑时遇到了困难.我已经阅读了有关强制执行特定信息NSNotifications的内容,但这并没有真正解决我所看到的问题.

[SomeObject PerformAsyncOperation]创建一个NSURLRequest并将自己设置为响应委托.根据响应的内容,将SomeObject成功或失败发布NSNotification到默认值NSNotificationCenter.

我的测试的问题是,在PerformAsyncOperation调用之后,测试不会等待响应被发送.相反,它继续使用断言 - 失败,因为请求/响应没有时间发送/接收/解析.

这是代码:

-(void)testMethod {
    SomeObject *x = [[SomeObject alloc] init];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                        selector:@selector(success:)
                                            name:SomeObjectSuccess
                                          object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                        selector:@selector(failure:)
                                            name:SomeObjectFailure
                                          object:nil];

    operationCompleted = false; // declared in .h

    [x PerformAsyncOperation:@"parameter"];

    STAssertTrue(operationCompleted , @"Operation has completed.");

    [[NSNotificationCenter defaultCenter] removeObserver:self name:SomeObjectSuccess object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:SomeObjectFailure object:nil];

    [x release];
}

-(void) failure:(NSNotification *) notification {
   operationCompleted = true;
   NSLog(@"Received failure message."); …
Run Code Online (Sandbox Code Playgroud)

xcode unit-testing ocunit ios4 observer-pattern

6
推荐指数
1
解决办法
3546
查看次数

如何在xcode 4中每次构建(运行)ios app之前自动运行OCUnit逻辑测试?

看来,我已将所有设置都设置正确.当我运行命令-u(或从菜单中选择产品 - 测试)测试运行正常.

最佳实践应该是,测试应该尽可能频繁地运行,理想情况是在每次构建期间(在每次运行期间理解).

如何强制XCode 4这样做?我试过:

  • 设置目标依赖项(将主应用程序目标设置为依赖于测试目标)
  • 在主应用目标构建设置中启用"构建后测试"
  • 勾选方案编辑器中的测试目标,用于运行主应用程序方案

但似乎没什么用.有没有人成功设置这个?

ocunit ios xcode4

6
推荐指数
1
解决办法
2408
查看次数

使用SenTestingKit/OCUnit测试异常

我似乎能够找到用于测试异常的唯一解决方案是使用SenTestingKit的STAssertThrowsSTAssertThrowsSpecific,但是在抛出异常的两种情况下,被测试的应用程序都会挂起,直到我手动要求它继续.当然,测试框架应该吞下这些例外吗?如果没有,是否有人对测试异常有任何建议?

exception objective-c ocunit ios sentestingkit

6
推荐指数
1
解决办法
771
查看次数

OCUnit测试失败,但Xcode Log Navigator说没有问题

我在Xcode和它的"日志导航器"中有一个非常偷偷摸摸的问题.

我重新创造了这样的问题; 我有一个非常简单的OCUnit测试:

-(void)testSimpleFailure{

    STFail(@"Please fail!");
}
Run Code Online (Sandbox Code Playgroud)

我清理我的构建,我构建我的测试方案,并运行我的测试.

在输出控制台窗口中,我看到我的所有测试执行,包括上面的测试.控制台显示实际运行的测试AND失败:

##teamcity[testFailed name='-|[SimpleTestClassTests.testSimpleFailure|]' message='Please fail!' details='']
Run Code Online (Sandbox Code Playgroud)

但是,Xcode显示"Tests Succeeded overlay",左侧的"Log Navigator"表示没有问题,全部都是绿色.

还有其他人有过类似的问题吗?有谁知道如何解决这个问题?

在我承诺之前,我非常希望不会得到误报.

编辑澄清我的问题.

xcode unit-testing ocunit

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

可以测试IBAction吗?

对IBOutlets进行单元测试有点容易,但IBActions呢?我试图找到一种方法,但没有任何运气.有没有办法在View Controller中的IBAction和nib文件中的按钮之间进行单元测试连接?

ocunit ios xctest

6
推荐指数
3
解决办法
6566
查看次数

基于iOS版本的条件单元测试

我的单元测试套件包含一些仅适用于最新iOS版本的测试用例.预计,在较旧的iOS版本上运行套件时,这些测试会失败.

是否有标准方法来指示这些测试用例应仅在特定的iOS版本上运行?

我想到的一个选择:

- (void) testSomethingThatOnlyWorksOniOS7
{
    const BOOL iOS7OrHigher = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
    if (!iOS7OrHigher) return;

    // Actual test goes here
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以告诉SenTestCase您动态跳过某些测试吗?

unit-testing objective-c ocunit ios sentestingkit

6
推荐指数
1
解决办法
1164
查看次数

有没有办法在 Xcode4 中“测试”当前文件?

有没有办法在 Xcode4 中“测试”当前文件?

也就是说,如果您正在编写第 10 个单元测试,但您不想进行 TEST 并运行所有单元测试,而是只想触发在当前所在的单元测试文件中运行这些测试?

xcode ocunit xcode4

5
推荐指数
2
解决办法
1268
查看次数