簡體   English   中英

如何測試moya請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM