본문 바로가기

분류 전체보기34

서버없이 Networking Test하기 with URLProtocol Networking Test 요즘에는 Network를 사용하지 않는 앱을 찾아보기 힘들 정도로 Network를 빼놓고서 앱을 얘기하기 힘들다. 따라서, Network 작업을 처리하는 로직을 Test하는 것도 매우 중요한 일 중 하나가 되었다. 하지만, Server의 응답을 받아서 처리를 해야하는 Network작업은 Test시에 Server의 상태에 상당히 의존적일 수 밖에 없다.이는 Test가 빠르지 못하고, 독립적이지 못해서 같은 요청을 보내더라도 똑같은 결과를 받지 못한다는 의미가 된다.(F.I.R.S.T 원칙) 어떻게 iOS에서 위 문제를 해결 할 수 있을지 Network작업을 처리하는 가장 기본적인 방법중 하나인 URLSession을 이용해서 알아보자. Network 작업이 진행되는 과정 모두 .. 2022. 5. 15.
Data Testing in Swift 계기 TestCode를 짜다가 Data를 만드는데 너무 많은 코드가 발생함을 인식하고 article을 참고하여 개선 방향을 공부해보고자 한다. Test Data UnitTest를 작성할 때 우리는 종종 고립된 환경에서 타입이나 함수를 테스트한다. 하지만, 이렇게 고립된 환경에서 대부분의 코드는 그 자체로 적절히 작동하지 않는다. 제대로 작동하기 위해서는, 추가적인 Dependecy와 Data를 추가해줘야한다. 테스트 가능한 코드를 작성하는 것의 큰 부분은 우리의 의존성이 어떻게 관리되고, 얼마나 쉽게 대체 될수 있느냐로 귀결되지만 Test Data를 어떻게 구성하고 관리하는지도 똑같이 중요하다. 어떻게 하면 Test Data를 좀더 잘 관리 할 수 있을까? Input and verification Tes.. 2022. 5. 12.
Generic을 이용한 CompileTime에 Type 검사하기. 우리는 개발중 분명 complieTime에는 에러가 안났는데, 앱을 실행시켜보니 원하던 방향과 다르게 작동하는 버그를 많이 발견하곤 한다. 따라서, complieTime에 버그를 잡는다면 많은 시간과 노력이 준다는 것을 알고 있다. 그중 한 예시를 들어보고 어떻게 하면 Complie시에 버그를 잡아 낼 수 있는지 알아보자. 예시 개발중에 많은 단계에서 우리는 객체에 대해 unique한 Identifier(식별자)가 필요할 때가 있다. 예를 들면, 로그인을 할때 사용자를 식별한다던지, Cache를 할때 이미 Cache된 데이터인지 아닌지 등등.. 주로 특정한 객체를 추적하고 그에 따른 값이나 결과를 가져오기 위해 사용이 된다. 문제는 이러한 Identifier를 가지는 타입의 객체가 여러개 일 수 있다는 .. 2022. 5. 12.
Memory Leak Case When ReferenceType in Dictionary 알다시피 Swift에서 Dictionary는 Struct이고 Value Type이다. 그렇다면, 이 Dictionary에 ReferenceType인 Class를 Value나 Key로 넣으면 어떻게 될까? 예시를 통해 알아보자. name이라는 Property를 가지고 있는 Class A와 B가 있다. class A { var name: String = "Park" deinit { print("A deinit!") } } class B { var name: String = "Kim" deinit { print("B deinit!") } } Class AB는 String을 Key값으로 String, AnyObject(Class)를 Value로 넣을 수 있는 Dictionary를 가지고 있다. class AB .. 2022. 5. 11.