Xcode 7测试不会运行但报告成功

时间:2015-09-28 13:58:45

标签: unit-testing xcode7 xctest

我试图将测试目标添加到我的项目中,但是当我运行测试时,似乎实际测试没有被执行,而Xcode总是报告成功,但是小方块表示如果通过或不通过测试仍然清楚。

我只有一个测试目标和一个类:

@implementation Tests

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    XCTAssert(false, "");
}

- (void)testPerformanceExample {
    XCTAssert(false, "");
}

@end

测试应该失败,但会显示一个弹出窗口表示成功。此外,测试报告称没有测试。

如果我尝试单独运行测试,测试"成功"但我没有得到关于报告的信息,广场仍然是空的。

关于如何修复它的任何想法?

11 个答案:

答案 0 :(得分:24)

对于遇到此问题的任何其他人,请检查以确保您的测试类继承自XCTestCase而不是XCTest。在我意识到我是从错误的类继承之前,我一直在疯狂地尝试所有这些解决方案。 Xcode没有抱怨,它只会说测试成功而不运行它们。希望这有助于某人。

答案 1 :(得分:22)

如果您正在为iOS构建,那么您通常将Xcode设置为在物理设备上运行吗?如果是这样,请尝试将其设置为在iOS模拟器上运行。

我发现,如果您将Xcode 7设置为物理设备单元,则测试的行为与您所描述的完全一致。将Xcode设置为暂时在iOS模拟器上运行以进行单元测试可以解决问题,现在它就像魅力一样。

我希望这有助于任何人遇到同样的问题。 :d

答案 2 :(得分:15)

值得一提的是将来坚持这一点的人:Xcode只运行以'test'开头的XCTestCase函数。这与其他平台相反,当我开始在iOS中进行测试时,这让我很困惑。

在以下课程中:

class MyBigTest: XCTestCase {

    func testSensibleInputReturnSensibleAnswer() {
        XCTAssert(/* stuff */)
    }

    func someOtherTest() {
        XCTAssert(/* some other stuff */)
    }
}

仅运行testSensibleInputReturnSensibleAnswer()

答案 3 :(得分:10)

关闭iOS设备电源,然后重新打开电源。您可能还需要移除USB电缆并重新连接,以便Xcode可以重新建立与设备的通信。当这发生在我身上时,测试会报告测试成功立即没有测试运行。我还注意到,当我尝试记录每次Xcode崩溃的新UI测试操作时 - 类似于我在第一次启用iOS设置 - 开发人员 - 启用UI自动化设置之前的行为方式,我记得iOS设备重启是必要的当这个启用时,我尝试重启iOS设备,Xcode再次开始表现,我可以在iOS设备上成功记录和运行测试。完全披露:在重新启动iOS设备之前,我还打开和关闭了启用UI自动化,但我怀疑这是必需的。 -rrh

答案 4 :(得分:9)

检查控制台(Command-Shift-Y)。

在我的情况下,打印输出表明测试未运行的原因。 (动态框架的飞行前检查失败了。)但我没有看到它,因为调试区域已崩溃。

同样在我的情况下,问题已修复,方法是将$(PROJECT_DIR)/Carthage/Build/iOS添加到我的运行时搜索路径here

答案 5 :(得分:2)

我遇到了同样的问题,清理构建文件夹会解决它。但是,有一种更快的方法是Product -> Perform Action -> Test Without Building

答案 6 :(得分:2)

旧问题,但在我的案例中解决它的事情在这里提到了:

您不能(总是?)重命名测试类/案例。创建一个新的类/案例并扔掉旧的。

答案 7 :(得分:1)

如果这是用于UI自动化测试,那么可能是因为您没有初始化应用程序并启动它。

XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];

答案 8 :(得分:1)

FWIW使用KIF的beforeAll时,我也遇到了类似的问题。有时放在beforeAll内的代码不起作用,但测试仍然会成功。

它有时会使Xcode崩溃。请参阅KIF的Github页面here。虽然有些人指出这个问题可能不是因为KIF,而是因为XCTest本身

临时解决方案是避免使用beforeAll而是使用beforeEach

答案 9 :(得分:0)

我将测试方法标记为private,而为我解决的方法就是删除private访问修饰符。

答案 10 :(得分:0)

在创建Objective-C测试时,遇到了与现有Swift类同名的情况。

只需重命名测试文件