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

Ema*_*uel 32 unit-testing xctest xcode7

我想测试目标添加到我的项目,然而,当我进行的测试,好像不被执行的实际测试,而不是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
Run Code Online (Sandbox Code Playgroud)

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

如果我尝试单独运行测试,测试"成功"但我没有获得有关报告的信息,并且方块仍为空.

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

小智 26

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


小智 22

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

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

我希望这可以帮助任何人遇到同样的问题.:d


huw*_*uwr 15

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

在以下课程中:

class MyBigTest: XCTestCase {

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

    func someOtherTest() {
        XCTAssert(/* some other stuff */)
    }
}
Run Code Online (Sandbox Code Playgroud)

只会testSensibleInputReturnSensibleAnswer()跑.


Ric*_*att 10

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


fun*_*oll 9

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

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

此外,在我的情况下,这个问题是固定的,加入$(PROJECT_DIR)/Carthage/Build/iOS的描述我的运行时搜索路径这里


sho*_*hoe 5

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