【问题标题】:How can i get the code coverage percentage information?如何获取代码覆盖率信息?
【发布时间】:2021-09-26 03:24:30
【问题描述】:

我正在尝试快速进行单元测试。我有一个名为MyFileManager 和SomeViewModel 的两类

class MyFileManager {
    static let shared = MyFileManager()
    
    func isStored(atPath path: String) -> Bool {
        return FileManager.default.fileExists(atPath: path)
    }
    func readData(atPath path: String) -> Data? {
        return try? Data(contentsOf: URL(fileURLWithPath: path))
    }
}

class SomeViewModel {
    func getCachedData() -> Data? {
        let path = "xxxxx"
        
        if MyFileManager.shared.isStored(atPath: path) {
            return MyFileManager.shared.readData(atPath: path)
        } else {
            return nil
        }
    }
}

我已经写了一个测试代码。我不确定这段代码是否会给我 100% 的代码覆盖率。这是单元测试

class LinePhoneTests: XCTestCase {

    override func setUpWithError() throws {
        testGetCachedData()
    }

    func testGetCachedData() {
        let viewModel = SomeViewModel()
        
        let data = viewModel.getCachedData()
        XCTAssertFalse((data != nil))
        
        XCTAssertTrue((data == nil))
    }

}

如何获取代码覆盖率信息?

【问题讨论】:

  • @JoakimDanielson 我希望 SomeViewModel 类的代码覆盖率达到 100%。我怎样才能做到这一点?
  • 与您的问题无关,但为什么不简单XCTAssertNotNil(viewModel.getCachedData())
  • 您的测试似乎正在尝试确保缓存正常工作。你应该以一种传达它的方式命名它。也许:testThatDataIsCached(更多细节将是有益的)
  • 顺便说一句,“先检查后行动”的模式已经无法修复了。每当您在没有同步机制的情况下在两个单独的步骤中检查和操作时,您就有可能出现错误。在这种情况下,有可能在您检查.isStored(atPath: path) 然后通过执行.readData(atPath: path) 做出反应的时间之间,其他东西可能已经从您的眼皮底下删除了该文件。您应该尝试阅读。如果文件不存在,只需捕获错误然后处理该情况。
  • 您永远无法达到 100% 的代码覆盖率,尝试毫无意义。这是初学者单元测试人员最常见的错误之一。测试你认为应该测试的东西。使用覆盖率作为未测试的提示,并查看是否应该测试它,但不要尝试完全覆盖。有许多行甚至无法测试,例如fatalError。此外,还有许多错误状态无法使用单元测试来模拟。

标签: ios swift unit-testing code-coverage


【解决方案1】:

您可以采取一些措施来监控代码覆盖率,以帮助您编写测试。

在你的方案中开启代码覆盖率设置:

打开这个菜单项:

然后在您的源文件中,您会在角落看到一个装订线:它会显示一个数字,表示执行此行的测试数量,红色显示未执行的行。

您可以在构建结果中看到代码覆盖率下的百分比:

使用这些工具,您可以编写测试来练习达到 100% 所需的代码路径,或者您可以判断错过的测试是否重要。

【讨论】:

    猜你喜欢
    • 2015-01-12
    • 2019-02-25
    • 2015-08-10
    • 2011-12-18
    • 2017-02-20
    • 2020-02-13
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多