티스토리 뷰

화면에는 사각형 추가버튼과 보드화면이 있습니다.

사각형 추가버튼을 누르면 화면에 랜덤position으로 사각형이 추가됩니다.

"보드에서 사각형이 있는 position을 터치 시 해당 사각형이 선택되고, 그에 따른 사이드이펙트 로직들이 실행됩니다."

 

고민사항.

랜덤으로 생성된 사각형인데, 이를(사각형의 position) 어떻게 알고 해당 메소드 인자값으로 position을 전달하지!?

 

1. 모든 좌표를 for문으로 검사하여 테스트한다.

만약 375 * 812라면... O(375 * 812)이다... 이게 맞나?

테스트의 First원칙 중 Fast를 위배하지 않나!?

물론 컴퓨터는 빠르고, 실제 환경이 아닌 테스트환경에서는 성능, 효율을 신경쓰지 실제환경 만큼 신경쓰지 않아도 된다고 공부했지만..

이건 조금 아닌 것 같다.

 

2. 사각형의 좌표를 직접 핸들링 할 수 있는 함수를 만든다.

간단하네!! 그냥 특정좌표를 정해두고 사각형의 좌표를 해당 좌표로 수정하는 것이다.

하지만.. 애초부터 직접 핸들링하는 함수를 만든다는 말이 객체지향에서 말하는 좋은 코드를 만드는 몇가지 방법들을 모두 어긴다.

다른객체에서 현재 객체로 직접 타고 들어와, 현재 객체의 값까지 바꿔버린다...

또한 테스트를 위해 실제 로직을 수정한다니.. 테스트 세계에 발을 딛는 동시에 듣는 말이다. (테스트를 처음 공부할 때)

"테스트를 위해 실제 로직을 변경하지 말아라."

 

이쯤 되면 점점 생각이 얽히고 가슴이 답답해진다...

어떻게 해야돼!!! 테스트 하지 말아야되나!?

 

이런 생각이 들면 다시 원점으로 나와서 처음부터 생각해본다.

내가 지금 테스트를 하고 싶은게 뭐였지..?

 

"보드에서 사각형이 있는 position을 터치 시 해당 사각형이 선택되고, 그에 따른 사이드이펙트 로직들이 실행됩니다."

그래서, 생성된 사각형의 좌표를 알아야 했어.

 

Give, When, Then 중 Give에서 사각형을 생성하는 함수가 있다.

이는 RectangleFactory객체에서 실행되는 함수이다. 그렇다면!

RectangleFactory를 추상화하여 Stub객체를 만들면 될 것 같다!

그래서 생성하는 함수의 구현로직에 특정 좌표를 넣어 사각형을 만들면 될 듯하다.

 

결론. 사각형을 만드는 객체를 추상화하여, Stub객체를 구현하여 특정 좌표의 사각형을 생성한다.

 

그 외의 랜덤함수 관련 테스트에 대한 견해이다.

Q : 랜덤함수는 어떻게 테스트하지!?

- 굳이 해야한다면 설정한 범위 내에 유효한 값인지 확인할 것 같다.

 

1. 그러나 랜덤함수는 보통 언어에 기본함수로 구현 되어있다.

2. 이는 Foundation의 함수를 테스트하는 것과 다른 의미가 있나? 싶다.

3. 그렇기에 이를 테스트하기보다, 이를 사용하는 더 큰 함수를 검증하는 편이 더욱 의미있는 테스트이지 않을까 싶다.

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함