StubbornNetwork 0.1.1

StubbornNetwork 0.1.1

Martin Kim Dung-Pham 维护。



  • 作者:
  • 作者

Travis SourceLevel

The Stubborn Network Logo

一个有观点的桩模拟机。

Stubborn Network 通过模拟网络请求的响应,使您的 SwiftUI 开发更高效UI 测试更可靠。它使您 轻松记录新的桩模拟 并提高效率!

桩模拟 UI 测试

UI 测试通过 The Stubborn Network 轻易记录实际网络请求并回放的方式受益。这使得您的测试更稳定,后端不会干扰您测试应用程序的流程。

为了记录和播放桩模拟,您需要

  • 配置您的 URLSession 在运行测试时在您的网络层中使用 The Stubborn NetworkURLProtocol
  • 另一方面,测试需要通知 The Stubborn Network 哪些 桩模拟源,换句话说,为哪个测试用例使用哪些桩模拟

应用程序配置

自定义的 URLProtocol 将使您的网络客户端的标准 URLSession 在 UI 测试执行期间成为桩模拟变体。这发生在应用程序内部

设置自定义 URL 协议的示例

let configuration = URLSessionConfiguration.default

if ProcessInfo().isUITesting {
    StubbornNetwork.standard.insertStubbedSessionURLProtocol(into: configuration)
    StubbornNetwork.standard.bodyDataProcessor = SensitiveDataProcessor()
    StubbornNetwork.standard.requestMatcherOptions = RequestMatcherOptions([.requestBody, .url, .httpMethod])
}

let urlSession = URLSession(configuration: configuration)

测试配置

将环境变量作为参数传递给受测试的应用程序,以指定我们想要模拟网络响应,要模拟什么,在哪里找到/放置它们。其中一些将在未来得到更优雅的处理

  1. 每个测试都将其函数名称分配给 STUB_NAME,以创建一个用于单独测试用例网络请求的专用桩模拟源
  2. "STUB_PATH" 指向包含桩模拟的桩模拟源存储的目录
  3. THE_STUBBORN_NETWORK_UI_TESTING参数简单地告诉应用(参看上方的应用配置)我们正处于测试环境中。这有助于区分测试和调试/发布模式。
示例 UI 测试

override func setUp() {
    super.setUp()

    app = XCUIApplication()
    setupSnapshot(app)

    let processInfo = ProcessInfo()
    app.launchEnvironment["STUB_NAME"] = self.name
    app.launchEnvironment["STUB_PATH"] = "\(processInfo.environment["PROJECT_DIR"] ?? "")/BTLBUITests/Stubs"
    app.launchEnvironment["THE_STUBBORN_NETWORK_UI_TESTING"] = "YES"

    app.launch()
}

func testBytesText() {
    /// In the test itself nothing needs to be changed
    app.buttons["Download"].tap()

    let bytesText = app.staticTexts["417 bytes"]
    wait(forElement:bytesText, timeout:1)
}

重录占位符

如果需要重新记录占位符,只需将其删除即可!

您可以在测试用例中定义的路径中找到占位符,它们通常看起来像这样:

XZYUITests_testABC.json

XZYUITests是您测试用例()的名称,而testABC是测试的名称(测试函数)。

贡献

运行测试

您可以从 Xcode 内(使用 cmd+U)或从命令行运行测试:export STUB_DIR='./stubs' && swift test

占位符在测试执行期间进行存储和读取。它们通常可以在临时目录中找到,例如:"file:///private/tmp/StubbornNetworkTests/67BED946-88E0-4F8C-98C7-7A23812D647A-3620-000001390930169C"