티스토리 뷰

저번에 주입한 의존성 주입 코드를 테스트해보겠습니다.

 

 

1. 서버가 없다 가정하고, 목데이터 책 펙토리 생성 후 책 정보를 가져오기.

2. 테스트 코드 추가, 실행

3. 서버가 생겼다 가정하고, 목데이터로 된 펙토리, 서버에서 가져오는 로직으로 바꾸기.

4. 테스트 코드 실행

 

의존성 주입을 함으로써 코드 테스트가 간편해진 이유는 "서버에서 책을 가져온다"는 동작을 추상화 했기에!!

의존성 주입의 필요성을 저번 포스트와 함께 작성하다 보니, 이의 필요성을 느끼는 것 같습니다.

 

class MyTest: XCTestCase {
    let bookMakable = MockBookFactory()
    let testMockClass = TestMockClass()
    func testMockData() throws {
        let bookStorage = BookStorage(bookMakeable: bookMakable, delegate: testMockClass)
        bookStorage.requestBookTapped()
    }
}

class TestMockClass: StorageDelegate{
    func returnBook(book: Book) {
        XCTAssertTrue((book.page < 100))
    }
}

MockBookFactory : 가짜 책정보를 가져오는 MockServer같은 클래스입니다.

TestMockClass : 가져온 데이터를 UseCase에서 ViewController로 전달하는 delegate protocol을 구현한 클래스입니다.

 

책의 페이지수는 100페이지를 넘기면 안됩니다. 그렇기에 테스트로직은 'XCTAssertTrue((book.page < 100))'입니다.

테스트 결과는 성공입니다! MockBookFactory에서는 항상 페이지가 99인 책을 만들고 있습니다.

 

만약 서버와 통신하는 로직이 완성되면!?

class MyTest: XCTestCase {
    let bookMakable = BookNetworkManager()
    let testMockClass = TestMockClass()
    func testMockData() throws {
        let bookStorage = BookStorage(bookMakeable: bookMakable, delegate: testMockClass)
        bookStorage.requestBookTapped()
    }
}

class TestMockClass: StorageDelegate{
    func returnBook(book: Book) {
        XCTAssertTrue((book.page < 100))
    }
}

단 한줄만 바꿔주었습니다!

바로 BookNetworkManager()로 인스턴스를 생성해주는 부분!

의존성의 장점 유지보수하기 용이하다!

 

그렇기에 테스트에도 용이하다! 하는 것 같습니다.

나중에 추가로 공부하여 무언가 알게 되면 또 포스팅하겠습니다.

아직 테스트가 익숙치 않아서...

 

감사합니다!!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함