单元测试多个进程之间的交互

时间:2014-03-21 15:03:40

标签: objective-c xctest

我正在编写一个Cocoa程序,该程序通过Accessibility API与其他程序交互。为了测试这些交互,我想启动一个小型测试程序并让我的测试对它起作用。为了验证测试结果,我考虑通过分布式对象查询测试仪。例如,我启动测试仪,它的主窗口出现,我的测试运行代码将窗口移动到特定位置,然后通过分布式对象查询测试程序以验证窗口是否移动到正确的位置

我有工作代码通过NSTask启动测试程序,我也有一些工作代码通过分布式对象传递我需要的结果,但只有在测试代码之前手动启动测试程序时它才有效。

我坚持使用XCTest自动完成整个测试。在setUp方法中,我通过NSTask启动测试程序,但是在运行测试之前我必须等待它完成启动。因此,在测试人员中,我想我会通过NSDistributedNotificationCenter发出通知,并在开始测试之前等待测试代码中的通知到达。但是我不确定在通知到来之前我应该​​如何阻止测试。

我考虑启动一个线程来等待通知并忙于等待来自主线程的标志,但NSDistributedNotificationCenter仅在主线程上发布通知。

也许有一种更简单的方法来同步我的测试代码和测试人员流程,而且我认为太复杂了?

1 个答案:

答案 0 :(得分:0)

我成功完成了第一部分,即通过让currentRunLoop run暂停一下,从setUp方法接收分发通知:

- (void)setUp
{
    [super setUp];

    [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(testerRunningNotification:) name:@"TesterReady" object:nil];

    _t = [NSTask launchedTaskWithLaunchPath:[NSBundle.mainBundle.bundlePath stringByAppendingPathComponent:@"../Tester.app/Contents/MacOS/Tester"] arguments:@[]];

    while(!_testerRunning)
    {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }
}

- (void)testerRunningNotification:(NSNotification *)notification
{
    _testerRunning = YES;
}

现在我只需要弄清楚从测试用例中获取分布式对象的必要条件。

相关问题