Code coverage in Xcode without tests (for manual run)

一世执手 提交于 2021-02-18 10:44:29

问题


Code Coverage is commonly used with tests in Xcode. I would like to use it for manually executed app. Can I do it, possibly with third-party tools?

For example: I build and launch the app on device, perform some actions with it and then look at code coverage results.


回答1:


Code coverage will record which parts of your code your test have run. But you could Build some UITests which would preform some actions as you said. UI can record UI tests to repeat the actions you perform on the simulator then when you run the test it will repeat what you did. The coverage will then show which parts of the code where excited during the UITests.

Look for some info on UITesting in Xcode 7. There is a good demo in one of the developer sessions from wwdc15

https://developer.apple.com/videos/wwdc/2015/?id=406




回答2:


Probably you might have already figured it out, but it was possible before Xcode7. The way we achieved this was, to set the "Instrument Program Flow" and "Generate Test Coverage files" flags to Yes, on your project, and later add a "flush" code somewhere inside you application, to write the coverage data files. This "flushing" part actually writes the coverage data files, which can be used later by other tools such as gcovr or lcov, to get your coverage data. Once you interact with the app, either manually or through automated tests, the coverage data gets written.

However, with Xcode7, looks like the coverage data is limited to only Xcode unit tests. I am still trying to figure out, if there is any way to gather the coverage data, by interacting with the application manually, or through automated tests.




回答3:


The solution was suggested by someone here: https://github.com/SlatherOrg/slather/issues/209

You could try having a XCUITest that sleeps forever, then manually use the app, and see if on termination the coverage files are generated.

I simply tried the solution and it worked perfectly for me:

class FooTests: XCTestCase {
    
    override func setUp() {
        super.setUp()
        let app = XCUIApplication()
        app.launch()
    }
    
    func testBalances() {
        sleep(30)
        XCTAssert(true)
    }
}

After the test succeeded on XCTAssert(true), I could see the code coverage for the manual use cases. You can play around with the sleep(30) to match your requirement.



来源:https://stackoverflow.com/questions/32909096/code-coverage-in-xcode-without-tests-for-manual-run

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!