小编zou*_*oul的帖子

单元测试和TDD,OCUnit与Google Tool Box

我正在尝试在OCUnit和Google Tool Box之间做出选择,你有任何偏好,会推荐其中一个,为什么?我很想知道你对2中任何一个的经历.

我对他们两个主要的问题是在测试方法中的崩溃管理(例如:BAD ACCESS)他们都没有能够告诉我在哪个类中发生了崩溃!

使用Google Tool Box,我可以看到正在运行哪个测试套件而不是测试用例(当您的测试套件有50个测试用例时,您应该怎么做?)

使用OCUnit,我至少可以看到测试套件导致崩溃的测试用例.

以下是我与GTB的消息:

Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.000) seconds

Test Suite 'LogicTests' started at 2009-12-14 18:03:15 +0100

 /Users/admin/Documents/Tests/GTBTest/RunIPhoneUnitTest.sh: line 122:   688    Segmentation fault      "$TARGET_BUILD_DIR/$EXECUTABLE_PATH" -RegisterForSystemEvents

 Command /bin/sh failed with exit code 139
Run Code Online (Sandbox Code Playgroud)

我可以看到,正是测试套件'LogicTests'引发了崩溃,但就是这样.

使用OCunit,这里是同一错误的消息:

Test Suite 'LogicTests' started at 2009-12-14 17:51:26 +0100
Test Case '-[LogicTests testFail]' started.
/Developer/Tools/RunPlatformUnitTests.include: line 415:   536 Segmentation fault      "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
Run Code Online (Sandbox Code Playgroud)

至少对于OCUnit,我可以跟踪正在运行的测试用例并最终对其进行调试(但是这可能需要很长时间才能没有任何类和行号信息...)

你是如何处理这些问题的?

提前致谢.

PS:这里是如何重现问题,这很简单:

只需创建一个类,该方法在调用时会崩溃(在您执行TDD时会一直发生):

- (void) crashMethod {
 NSMutableArray *crashArray; …
Run Code Online (Sandbox Code Playgroud)

iphone tdd unit-testing ocunit

10
推荐指数
1
解决办法
1739
查看次数

为什么Xcode会不断重新编译我未触动过的项目?

我有一个包含多个项目的Xcode 4工作区.一切都完美构建并按预期工作,只有Xcode经常重新编译文件.如果我点击Build按钮,等待编译成功,然后再次按下按钮,那不应该是非操作,因为没有文件发生变化吗?因为我的Xcode重新编译了项目的很大一部分.即使我建立然后立即点击播放按钮,我也必须再次盯着建筑过程.这是否是必要的,是否是预期的行为?

xcode xcode4

10
推荐指数
1
解决办法
455
查看次数

从$中提取信息?

您能否提供有关以下perl代码段的详细说明.我从谷歌得到了一些想法,但仍有很多基本的混乱.如果你可以提供小笔记,那将是很有帮助的

$exit_value  = $? >> 8;
$signal_num  = $? & 127;
$dumped_core = $? & 128;
Run Code Online (Sandbox Code Playgroud)

perl

10
推荐指数
2
解决办法
411
查看次数

是否可以在iOS应用程序中运行XCTest测试?

我们有一个用XCTest编写的后端测试套件.该套件在Xcode中运行良好,但由于各种原因,如果我们也可以在iOS应用程序中运行该套件,那将对我们很好.那可能吗?我不介意为它编写一些粘合代码,但因为它甚至无法在非测试目标中导入XCTest框架:

SomeController.swift:2:8: Cannot load underlying module for 'XCTest'
Run Code Online (Sandbox Code Playgroud)

testing ios xctest

10
推荐指数
1
解决办法
888
查看次数

堆栈跟踪中的__forwarding__是什么意思?

(gdb) bt
#0  0x302ac924 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ ()
#1  0x92077e3b in objc_exception_throw ()
#2  0x302d6ffb in -[NSObject doesNotRecognizeSelector:] ()
#3  0x3026e056 in ___forwarding___ ()
#4  0x3024a0a2 in __forwarding_prep_0___ ()
#5  0x00004ae9 in -[GameObject doesTouch:] (self=0xe893a0, _cmd=0x643ee, obj=0xe82e20) at /Users/aaa/Desktop/CPT/Game/Classes/GameObject.m:220
#6  0x00006e05 in -[StaticGrid checkTouchNearest:] (self=0xe82f20, _cmd=0x64ec3, obj=0xe893a0) at /Users/aaa/Desktop/CPT/Game/Classes/StaticGrid.m:62
#7  0x0000a393 in -[EAGLView touchesBegan:withEvent:] (self=0xe8dad0, _cmd=0x3199fa3c, touches=0x632c0b0, event=0xe14590) at /Users/aaa/Desktop/CPT/Game/Classes/EAGLView.m:459
#8  0x30910f33 in -[UIWindow _sendTouchesForEvent:] ()
#9  0x308faecb in -[UIApplication sendEvent:] ()
#10 0x309013e1 in _UIApplicationHandleEvent ()
#11 0x32046375 in PurpleEventCallback …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c stack-trace message-forwarding

9
推荐指数
1
解决办法
1589
查看次数

在Xcode 4中使用静态库进行头管理

在Xcode 4中导入静态库头是否有最佳实践?我的大多数项目都依赖于其他几个项目,因此我最近开始使用工作区功能从一个地方构建所有需要的模块(我觉得非常方便).

糟糕的是我们不能在iOS上使用自定义框架,因此必须将依赖关系构建为静态库,并且我会遇到标头搜索路径的问题.虽然框架在框架包中保留了它们的标头,但静态库没有选项.我讨厌为我导入的每个库单独设置用户标题搜索路径.理想情况下,我想将依赖项目拖到工作区,将库添加到主目标并构建,无需进一步设置.是否支持此工作流程?

header-files static-libraries xcode4

9
推荐指数
1
解决办法
5128
查看次数

Moose类的依赖注入

我有一个需要发送类型请求的Moose类Foo::Request.我需要从外部访问这个依赖项,以便我可以轻松地在测试中交换请求实现.我想出了以下属性:

has request_builder => (
    is => 'rw',
    isa => 'CodeRef',
    default => sub {
        sub { Foo::Request->new(@_) }
    }
);
Run Code Online (Sandbox Code Playgroud)

然后在代码中:

my $self = shift;
my $request = $self->request_builder->(path => …);
Run Code Online (Sandbox Code Playgroud)

在测试中:

my $tested_class = …;
my $request = Test::MockObject->new;
$request->mock(…);
$tested_class->request_builder(sub { $request });
Run Code Online (Sandbox Code Playgroud)

是否有更简单/更惯用的解决方案?

perl dependency-injection moose

9
推荐指数
1
解决办法
1083
查看次数

如何在ARC下使用块完成处理程序释放对象?

这是我的代码中分配对象的常见模式,让它使用完成处理程序执行一些操作并在处理程序中释放它:

LongOperation *foo = [[LongOperation alloc] init];
[foo runWithCompletion:^{
    // run some code and then:
    [foo autorelease];
}];
Run Code Online (Sandbox Code Playgroud)

这很好用,但是当我尝试将代码转换为ARC时,Xcode正确地抱怨它不能简单地autorelease从块中删除,因为这会使foo对象在离开作用域后被释放.

那么在ARC下编写这种模式的好方法是什么?我可以为foo:引入一个实例变量:

[self setFoo:[[LongOperation alloc] init]];
[foo runWithCompletion:^{
    // run some code and then:
    [self setFoo:nil];
}];
Run Code Online (Sandbox Code Playgroud)

......但代码不再是可重入的.

memory-management objective-c objective-c-blocks automatic-ref-counting

9
推荐指数
1
解决办法
838
查看次数

如何在UIWebView中可靠地检测链接点击?

我有一个UIWebView,当用户点击链接时我需要做一些事情.有一个委托回调,可用于检测水龙头:

- (BOOL) webView: (UIWebView*) webView
    shouldStartLoadWithRequest: (NSURLRequest*) request
    navigationType: (UIWebViewNavigationType) navigationType
{
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        …
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是此代码不处理所有链接点击.例如,一个普通的Google搜索结果页面对链接做了一些奇怪的事情:

<a href="http://example.com/" class="l" onmousedown="return rwt(…)">
    <em>Link Text</em>
</a>
Run Code Online (Sandbox Code Playgroud)

rwt功能导致链接UIWebViewNavigationTypeLinkClicked在点击时不触发事件.有没有办法可靠地检测落入"导航到其他页面"存储桶的所有事件?

uiwebview ios

9
推荐指数
1
解决办法
1万
查看次数

在Perl中,关于注释和原型的这两个警告意味着什么?

我有以下代码

#! /usr/bin/perl

use strict;
use warnings;

################### Start Main ####################
my @startupPrograms = qw(google-chrome thunderbird skype pidgin );
my @pagesToBeOpenedInChrome = qw(http://www.google.com/ http://stackoverflow.com/ https://mail.google.com/mail/u/0/#inbox);
main();


#################################################

sub main() {

}
Run Code Online (Sandbox Code Playgroud)

我得到以下警告

[aniket@localhost TestCodes]$ ./test.pl 
Possible attempt to put comments in qw() list at ./test.pl line 8.
main::main() called too early to check prototype at ./test.pl line 9.
Run Code Online (Sandbox Code Playgroud)

程序运行正常,但我无法理解警告.他们的意思是什么?

perl

9
推荐指数
2
解决办法
721
查看次数