Skip to content

[기술 공유] Test가 Serial하지 않군요!

00me edited this page Nov 28, 2024 · 1 revision

문제 상황

파일 시스템을 테스트를 해야하는데… 아니 왜자꾸 뭐 됐다~~ 안됐다~~~ 하는 것이느냐…

image

내 로직은 완벽하다고!!


문제 해결

그렇습니다

파일을 읽고 쓰다 하다보면 이런 일이 발생할 수 있죠…

특히 Async환경에서는 더더욱 쉽습니다.

그러면 어떻게 해야할까요?

사실 FileManager를 제가 만들때 의도한 것은 여러 스레드에서 병렬적으로 실행되기를 바랬습니다.

그래야 UI를 막지 않고, 빠르게 일을 처리할 수 있으니까요.

그런데 이는 하나의 파일에 대해 하나의 일을 시켰을 때의 경우입니다.

Test처럼 하나의 파일에 대해 여러번 주작하게 되면 문제가 발생하기 Sheep상이죠

그러면 어떻게 해야할까요?

가장 간단한 방법은 Test가 Serial하게 실행되는 것입니다.

어떻게요? MainActor를 붙여서?? 저희 고상하게 가보자고요.

자 소개합니다!

@Suite!!

이 슈트 아님

SwiftTesting에서 테스트코드를 쓸 때 Struct나 Class, Actor로 만드는 것을 아실겁니다.

이 때 저희가 생성한 테스트코드 타입들이 암시적으로 하나의 Suite가 됩니다.

일종의 테스트 모음 정도로 생각하면 됩니다.

그런데 Swift가 늘~~그렇듯 자동으로 만들어주는 것은 좋은데 주작이 안된다는 겁니다…

그래서! 타입에 @Suite를 명시함으로써 저희가 원하는 효과를 주작할 수 있습니다.

일단 저는 Serialized가 필요해서 이를 넣어주었습니다.

image

그러면 이렇게? TADA~~~

image

성공띠…

그렇게 저는 JH타임을 지킬 수 있게 되었다고 합니다!

잘됐군~ 잘됐어~~


배운 점

SwiftTesting에는 Suite라는 것이 있다.

이것으로 테스트 코드 모음에 대해 원하는 효과를 주입할 수 있다.


참조 링크

[iOS] ✅ Swift Testing

Clone this wiki locally