小编Jon*_*hen的帖子

为Mac OS命令行工具编写XCTestCase

我正在尝试对为Mac OS编写的命令行工具进行单元测试.

当我第一次创建项目时,XCode不会在项目导航器中生成测试组.当我尝试添加新的测试目标时,它不会让我选择将我的目标指定为"要测试的目标".

我的问题是:甚至可以将XCTest用于命令行工具项目吗?或者,由于我可以从命令行运行它,这只是被认为是微不足道的?我能理解这个推理,但我确实想测试内部功能.

macos xcode command-line-tool xctest

11
推荐指数
2
解决办法
2934
查看次数

iOS - EXC_BAD_ACCESS com.apple.avkit.seekQueue 崩溃

我正在尝试调试我不知道原因的崩溃。不幸的是,我所拥有的只是我从 Crashlytics 中检索到的堆栈跟踪,并且几乎找不到我的应用程序导致这种情况发生的证据,因此很遗憾我无法提供任何具体的代码示例,我在这里发布纯粹是希望之前有人遇到过这种情况。

我在通过 Crashlytics 收集的所有相关崩溃堆栈跟踪中看到,它在名为“com.apple.avkit.seekQueue”的线程上崩溃。输出如下所示:

Crashed: com.apple.avkit.seekQueue
0  libobjc.A.dylib                0x18c3e17f4 objc_object::release() + 8
1  libsystem_blocks.dylib         0x18c86fa68 _Block_release + 160
2  libdispatch.dylib              0x18c81a9a0 _dispatch_client_callout + 16
3  libdispatch.dylib              0x18c828ad4 _dispatch_queue_serial_drain + 928
4  libdispatch.dylib              0x18c81e2cc _dispatch_queue_invoke + 884
5  libdispatch.dylib              0x18c828fa8 _dispatch_queue_override_invoke + 344
6  libdispatch.dylib              0x18c82aa50 _dispatch_root_queue_drain + 540
7  libdispatch.dylib              0x18c82a7d0 _dispatch_worker_thread3 + 124
8  libsystem_pthread.dylib        0x18ca23100 _pthread_wqthread + 1096
9  libsystem_pthread.dylib        0x18ca22cac start_wqthread + 4
Run Code Online (Sandbox Code Playgroud)

由于 Crashlytics,我看到的例外是 EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000020。由此我只能假设有一个 AVPlayer 对释放或受限的内存地址做了一些事情,但堆栈跟踪没有显示除主线程中的 main.m 之外的任何其他进入我的应用程序的入口点。

FWIW,Crashlytics 还建议以下内容:

堆栈跟踪表明堆损坏可能导致您的应用程序崩溃。释放悬空指针、线程竞争或错误的指针算法很容易导致内存损坏。要记住的重要一点是,最终的崩溃可能发生在初始损坏之后很久。因此,此崩溃的堆栈跟踪可能无法提供有关代码中错误位置的任何线索。 …

debugging xcode crash-reports ios avkit

5
推荐指数
0
解决办法
922
查看次数

是否可以使用EarlGrey(iOS UI测试)解除系统警报?

我开始尝试使用EarlGrey一点点,现在已经使用XCUITest进行了UI测试.我遇到了无法解除系统警报的经典问题,这很奇怪,因为看起来Google实现了一个名为grey_systemAlertViewShown()的系统警报匹配器.我正在尝试使用GREYCondition检测系统警报.这是我尝试过的:

    - (void)waitForAndDismissSystemAlertForSeconds:(NSInteger)seconds {
    GREYCondition *interactableCondition = [GREYCondition conditionWithName:@"isInteractable" block:^BOOL{
        // Fails if element is not interactable
        NSError *error;
        [[EarlGrey selectElementWithMatcher:grey_systemAlertViewShown()] assertWithMatcher:grey_interactable() error:&error];

        if (error) {
            return NO;
        } else {
            NSError *allowButtonError;
            [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Allow")] assertWithMatcher:grey_notNil() error:&allowButtonError];
            if (!allowButtonError) {
                [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Allow")] performAction:grey_tap()];
               }

        return YES;
    }];

    [interactableCondition waitWithTimeout:seconds];
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用这里描述的addUIInterruptionMonitorWithDescription(但是使用EarlGrey代码来完成我在上面的中断监视器中所做的事情):Xcode 7 UI测试:如何在代码中解除一系列系统警报

两种方法都不奏效.我的GREYCondition中的非错误情况不会触发断点,并且中断监视器也不会解除我的警报.

有人知道EarlGrey是否支持解雇系统警报?

ui-testing ios earlgrey

4
推荐指数
1
解决办法
1385
查看次数

在setUp中获取测试方法的名称(Xcode)

我想在日志中添加一条消息,其中包含即将运行的测试方法的名称。我想在我的测试超类的setUp方法中执行此操作,因此不必到处重复代码。

我想做这样的事情:

- (void) setUp {
    [super setUp];
    [self log:@NSStringFromSelector(_cmd)];
}
Run Code Online (Sandbox Code Playgroud)

但是,_cmd始终将“ setUp”作为其字符串,而我想要“ test00TestTheThing”

有没有办法做到这一点?

xcode objective-c xctest

3
推荐指数
1
解决办法
1122
查看次数

XCUITests - 通过命令行传入环境变量

我正在尝试通过命令行将值传递给我的 XCUITest。我知道可以通过以下方式为 XCTest(非 UI)执行此操作:

xcodebuild -verbose test -workspace MyWorkspace.xcworkspace -衍生数据路径衍生数据 -scheme "MyScheme" -configuration Debug SYMROOT="$(pwd)"/build -destination platform="iOS Simulator",name="iPad Air",OS=10.2 -仅测试:UITests/UITests -resultBundlePath 日志文件 MY_SETTING="setting_value" MY_OTHER_SETTING="setting_value_2"

然而,这似乎在我的 XCUITest 中不起作用,因为代码没有进入 #ifdef MY_SETTING 块。是否有另一种方法可以通过命令行将值传递给我的 XCUITest,或者这是不可能的?

xcode ios xcode-ui-testing

3
推荐指数
2
解决办法
7450
查看次数