美文网首页
Swift中的VIP架构及测试 (二)

Swift中的VIP架构及测试 (二)

作者: 三国韩信 | 来源:发表于2022-12-01 15:50 被阅读0次

Swift中的VIP架构及测试(一)

上一篇结尾说了vip架构的好处是很好做unitTesting,这一篇就说一下在VIP架构下,unitTesting怎么做。

一、unit Testing

在VIP架构中,最核心的3部分,controller、interactor、presenter,相应的testing也是针对这3部分的。
1、interactor的testing有2点,一个去mock一个presenter对象,presenter是能获取到interactor的response的,所以mock一个presenter去严重interactor的数据逻辑是否正确。另一个是去mock一个worker对象,interactor的数据源是通过一个个worker去获取的,那么我们要模拟数据的生成就需要去mock一个worker对象去生成测试数据。比如在demo中,就去mock了SCFindListPresenterTest和SCFindListWorkerTest这2个类

class SCFindListPresenterTest: FindListPresenterDataProtocol {
        var presenterCalled = false
        func presentListData(response: SCFindListModels.FetchLists.Response) {
            presenterCalled = true
            XCTAssert(!response.isMore, "非上拉加载更多")
            XCTAssert(response.dataSource.count == 5, "list数量有误")
            XCTAssert(response.count == 5, "list总数量有误")
        }
    }
    
    
    class SCFindListWorkerTest: SCFindListWorker {
        override func requestForFindListData(cid: Int, pageIndex: Int, pageSize: Int, complete: @escaping (DataModel) -> Void) {
            let model = MockData.parserToObject()!
            complete(model.data!)
            /*DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
                let model = MockData.parserToObject()!
                complete(model.data!)
            }*/
        }

2、presenter的testing是要去mock一个controller对象,因为controller是接收presenter数据的,那么我们就可以在controller对象接收的数据里去验证。

class SCFindListControllerTest: SCFindShowListProtocol {
        var presenterCalled = false
        func showFindList(_ with: SCFindListModels.FetchLists.ViewModel) {
            presenterCalled = true
            XCTAssert(!with.isMore, "非加载更多")
            XCTAssert(with.count == 5, "数量错误")
            for item in with.dataSource {
                XCTAssert(!item.avatar.isEmpty , "没赋值正确")
                XCTAssert(!item.nickname.isEmpty, "没赋值正确")
            }
        }
    }

3、controller的testing就比较多了,包括对interactor发起request的测试,还有页面一些数据加载的testing,比如页面是有tableview的话,要测试tableview的section、row及cell的一些情况。这个就根据具体的页面样式来测试了。在vip中controller是对interactor发起request的,这个是要测试的,故需要mock一个interactor对象来接收request并校验数据。

class SCFindListInteractorTest: FindListDataProtocol {
        var interactorCalled = false
        func getFindListData(request: SCFindListModels.FetchLists.Request) {
            interactorCalled = true
            XCTAssert(!request.isMore, "加载错误")
            XCTAssert(request.cid == 1, "加载错误")
            XCTAssert(request.pageSize == 10, "加载错误")
            XCTAssert(request.pageIndex == 1, "加载错误")
        }
    }

相关文章

网友评论

      本文标题:Swift中的VIP架构及测试 (二)

      本文链接:https://www.haomeiwen.com/subject/ycwefdtx.html