我正在开发一个iOS应用程序,其主要目的是与一组远程Web服务进行通信.对于集成测试,我希望能够针对某些具有可预测结果的虚假Web服务运行我的应用程序.
到目前为止,我已经看到两个建议:
我很好奇社区对这些方法的看法以及是否有任何工具来支持这个工作流程.
更新:让我提供一个具体的例子.我有一个使用用户名和密码的登录表单.我想检查两个条件:
所以我需要一些代码来检查用户名参数并向我发出适当的响应.希望这是我在"虚假网络服务"中需要的所有逻辑.我该如何干净利落地管理这个?
我使用Alamofire的Swift 2代码查询它希望返回JSON的远程URL.我已经做了足够的交互式测试,以确信它的行为足够正确.现在我想对它进行单元测试,这样我就可以依赖这些代码,然后转向其他事情.
我是Swift的新手,虽然我已经编写了几十年的OO Perl,所以我可能错过了一些东西.
这是我到目前为止设置检查代码的方式(不重要的事情,例如我如何删除用户名和密码以避免牦牛剃须).调用代码指定用户名和密码,并且只要获得结果,就会调用两个回调中的一个.(我没有处理错误,所以请不要对这个问题进行侧面跟踪.)
struct checkUsernameHandler {
var onSuccess: () -> ()
var onFailure: () -> ()
}
struct checkUsernameOutput {
var authenticated: Bool?
}
func checkUsername(user: User, handler: checkUsernameHandler) {
Alamofire.request(.PUT, NSURL(string: baseURL + "/user/verify?key=" + apiKey)!,
parameters: [
"username": user.username!,
"password": user.password!,
],
encoding: .JSON
).responseJSON { response in
let checkusernameOutput = self.analyseCheckUsernameResponse(response)
if let authenticated = checkusernameOutput.authenticated {
if authenticated {
handler.onSuccess()
} else {
handler.onFailure()
}
}
}
}
func analyseCheckUsernameResponse (response: Response<AnyObject, NSError>) -> …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我发送.GET请求从服务器获取数据,为此我使用Alamofire和SwiftyJSON.
例如:
我有文件"链接","请求"和我的ViewController.
Links.swift
var getAllData: String {
return "\(host)api/getalldata"
}
Run Code Online (Sandbox Code Playgroud)
Requests.swift
func getAllData(_ completion:@escaping (_ json: JSON?) -> Void) {
Alamofire.request(Links.sharedInstance.getAllData).validate().responseJSON { (response) in
do {
let json = JSON(data: response.data!)
completion(json)
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图控制器
Requests.sharedInstance.getAllData { (json) in
// ...
}
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能为这个案例编写单元测试?我刚刚学习单元测试,在所有书籍中只有本地案例,没有网络案例的例子.请允许任何人描述我并帮助如何使用Alamofire和SwiftyJSON编写网络请求的单元测试?
alamofire ×2
ios ×2
swift ×2
unit-testing ×2
json ×1
mocking ×1
swifty-json ×1
testing ×1
web-services ×1