在 swift 包管理器中为 API 调用编写单元测试
Posted
技术标签:
【中文标题】在 swift 包管理器中为 API 调用编写单元测试【英文标题】:Write unit test in swift package manager for API call 【发布时间】:2020-06-01 09:30:01 【问题描述】:我对编写单元测试用例完全陌生。 这是我第一次写,我很困惑。 我正在创建一个 swift 包管理器,我在其中编写了一种可以接受的方法
网址
HTTP方法
参数
我在那里使用 Alamofire 作为包依赖,它将从传递的 URL 调用 API,然后响应将被捕获。
以下是代码,
Framework.swift
文件
public let APIFramework = APICore.default
let version = "1.0.0"
FrameworkClass.swift
文件代码
import Foundation
import Alamofire
public protocol APICoreDelegate: AnyObject
func didReceiveData(data: Data)
open class APICore
public static let `default` = APICore()
public var delegate: APICoreDelegate?
open func processApiCall( url : String, method: HTTPMethod, parameters: Dictionary<String, Any>)
AF.request(url, method: method, parameters: parameters).responseJSON (response) in
switch response.result
case .success:
guard let jsonData = response.value else
return
self.delegate?.didReceiveData(data: jsonData as! Data)
case .failure: break
现在我必须在CDHFrameworkTests
类中为此方法编写单元测试用例。
import XCTest
@testable import CDHFramework
final class CDHFrameworkTests: XCTestCase
override func setUp()
func testExample()
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct
// results.
static var allTests = [
("testExample", testExample),
]
任何人都可以帮助我至少完成一个测试用例,这样我就可以研究它并尝试编写其余的测试用例。 我读了很多,但所有的材料都让我很困惑。 对此编写测试用例的任何帮助将不胜感激。
提前致谢。
【问题讨论】:
谷歌搜索“swift unit test network call”怎么样? 旁白:将潜在的不想要的依赖项强加给包的消费者被认为是不好的做法。除非您有真正令人信服的理由使用 Alamofire 而不是 URLSession,否则您应该考虑摆脱这种包袱。 【参考方案1】:你开始了解单元测试真是太好了(相信我,它们会让你的生活变得更轻松)。
关于上面代码的 sn-p,我必须提到几件事,因为你在 API 核心类 (AF.request
) 中直接调用 Alamofire,你将无法模拟您的网络,因此无法执行单元测试本身。当然,您可以:
您应该查看这些资源:
Unit testing your network layer My own network library in SPM我需要改进我的库中的文档,但网络层已被测试完全覆盖 + 它是 SPM(毕竟这是你最初的问题)。
祝大家在自动化测试方面一切顺利,干杯!
PS:您应该考虑消除简单任务的网络层依赖关系。如果您需要在网络端进行一些真正繁重的工作,Alamofire 和 Moya 等库是很好的选择,否则它们是不必要的样板。如果您需要一个起点,请查看这些其他重要资源:
Networking In Swift With URLSession:很好的介绍,让你的脚趾浸入 Swift 的原生URLSession
水域
Network Requests and REST APIs in ios with Swift (Protocol-Oriented Approach):如果您已经熟悉协议和泛型,可以了解更多高级内容。
【讨论】:
以上是关于在 swift 包管理器中为 API 调用编写单元测试的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 包管理器中添加 Apollo 的代码生成构建脚本时出错
从现有 Xcode 项目中为 Swift 包管理器导出 Package.swift