[英]How to test moya request
我想開始為我所有的moya請求編寫測試用例。 我在互聯網上搜索過,但沒有找到。 *如何測試簡單的moya .get請求。
任何幫助表示贊賞。 謝謝。
這就是我和Moya一起進行單元測試的方法。 我有我的NetworkManager,它使用默認參數生成所有請求和init
(在生產代碼上使用它),因此我們可以在測試時指定不同的提供程序。
struct NetworkManager {
private let provider: MoyaProvider<MultiTarget>
init(provider: MoyaProvider<MultiTarget> = MoyaProvider<MultiTarget>()) {
self.provider = provider
}
func createUser(_ user: User, completion: @escaping (Result<User>) -> Void) {
provider.request(MultiTarget(UserApi.createUser(user: user))) { (result) in
switch result {
case .success(let response):
do {
let user = try response.map(User.self)
completion(.success(user))
} catch let error {
completion(.error(error))
}
case .failure(let error):
completion(.error(error))
}
}
}
// other requests...
}
所以在生產代碼上你可以有這樣的東西:
let manager = NetworkManager()
let viewController = ViewController(networkManager: manager)
在測試類似的東西:
class TestMoyaTests: XCTestCase {
var networkManager: NetworkManager!
override func setUp() {
super.setUp()
networkManager = NetworkManager(provider: MoyaProvider<MultiTarget>(stubClosure: MoyaProvider.immediatelyStub))
}
func testGetUser() {
let expected = User(id: "1", name: "John")
var response: User?
networkManager.getUser(id: "1") { (result) in
if case let .success(user) = result {
response = user
}
}
XCTAssert(response == expected)
}
// other tests...
}
或者,如果您正在尋找的是測試MoyaProvider
本身,您可以查看Moya的團隊是如何做到這一點的。 由於存根被立即返回,因此不需要任何預期或類似的東西(這就是Moya的團隊測試.sampleData
)。
希望這可以幫助!
您可以使用OCMock來存根完成處理程序並返回您自己的完成處理程序。 示例 -
__block UIView *mockViewAnimation;
__block void(^animationsBlock)(void);
__block void(^completionBlock)(BOOL);
beforeEach(^{
void (^viewAnimation)(NSInvocation *) = ^(NSInvocation *invocation) {
[invocation retainArguments];
[invocation getArgument:&animationsBlock atIndex:5];
[invocation getArgument:&completionBlock atIndex:6];
};
mockViewAnimation = OCMClassMock([UIView class]);
// This stub tests the animation with duration, delay, and options
// Animation and Completion aren't tested here because they'll have their own tests.
OCMStub([mockViewAnimation animateWithDuration:1
delay:0
options:UIViewAnimationOptionCurveEaseIn
animations:[OCMArg any]
completion:[OCMArg any]]).andDo(viewAnimation);
[sut viewDidLoad];
});
然后你可以調用animationsBlock(); 或completionBlock(YES);
這是模擬完成處理程序的示例,您可以使用相同的邏輯來模擬Mayo完成處理程序。 或其他任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.