调试窗口不显示打印语句

时间:2019-12-16 12:06:48

标签: swift xcode unit-testing debugging

我已经能够在我的应用的调试窗口中看到打印语句。当我创建一个“模拟”程序(小型试用版应用程序)以了解Swift测试时,FirstTests文件夹下的LifecycleTests.swift文件中的所有打印语句都不会显示在调试窗口中。

import XCTest

class LifecycleTests: XCTestCase {

    override class func setUp() {
        // Put setup code here. This method is called before the invocation of each test method in the class.
        print("In class setUp.")
        // NSLog("In class setUp.")
    }

    override class func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        print("In class tearDown.")
        // NSLog("In class tearDown")
    }

    override func setup() {
        print("In setup.")
        // NSLog("In setup")
    }

    override func tearDown() {
        print("In tearDown.")
        // NSLog("In tearDown.")
    }

    func testExample() {
        print("Starting test.")
        // NSLog("Starting test.")

        addTearDownBlock {
            print("In first tearDown block.")
            // NSLog("In first tearDown block.")
        }

        // print("In middle of test.")
        NSLog("In middle of test.")

        addTearDownBlock {
            print("In second tearDown block.")
            // NSLog("In second teardown block.")
        }

        print("Finishing test.")
        // NSLog("Finishing test.")
    }

    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }
}

1 个答案:

答案 0 :(得分:1)

一次只能从一个目标获得控制台输出。默认情况下,控制台输出设置为来自应用程序目标而不是测试目标。

如果仅运行包含print语句的测试,则不会看到任何调试器输出:

enter image description here

该测试有一个print语句,但是我们运行了该语句,但控制台中没有任何内容。

好的,但是现在让我们欺骗控制台以查看来自测试目标的输入。为此,在测试中放置一个断点:

enter image description here

我们跳过了print语句,该语句连同有关测试的许多其他有用信息一起打印到控制台:

enter image description here

有趣的是,一旦您使用了这个技巧,就可以将断点带走。在再次运行应用程序本身之前,测试目标仍然是控制台源。

这招很奇怪,但这似乎是唯一的方法。苹果实际上在他们的docs中以暗示的方式承认了这一点:

  

如果您一直积极参与调试,则调试会话的任何输出也会显示在[控制台中]

显然“积极参与调试”意味着您已经在测试中设置了断点。