Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 메모이제이션
- 이분 탐색
- 스택
- 달팽이
- Spring Cloud Config
- spring cloud
- 주울
- 구현
- 유레카
- spring boot
- dp
- 구간 트리
- 비트마스킹
- Logback
- 완전 탐색
- 플로이드 와샬
- 백트래킹
- Java
- docker-compose
- 이분 매칭
- Zuul
- 다익스트라
- BFS
- 스프링 시큐리티
- 게이트웨이
- 서비스 디스커버리
- 도커
- 트리
- ZuulFilter
- Gradle
Archives
- Today
- Total
Hello, Freakin world!
[채팅앱][클라이언트] EventLoop 클래스 작성하기 - 반드시 단위 테스트 작성해야만 하는가에 대해서 본문
Toy Project/채팅 앱 만들기
[채팅앱][클라이언트] EventLoop 클래스 작성하기 - 반드시 단위 테스트 작성해야만 하는가에 대해서
johnna_endure 2020. 2. 27. 05:35public class EventLoop extends Thread{
Selector selector;
EventHandler eventHandler = new EventHandler();
Logger logger = Logger.getLogger(EventLoop.class.getCanonicalName());
public EventLoop(Selector selector) {
this.selector = selector;
Thread.currentThread().setDaemon(true);
}
@Override
public void run() {
logger.entering("EventLoop", "run");
while(true) {
try {
selector.select();
logger.fine("[클라이언트][이벤트루프] : select() 호출됨.");
} catch (IOException e) {
e.printStackTrace();
}
Set<SelectionKey> selectionKeySet = selector.selectedKeys();
for (SelectionKey key : selectionKeySet) {
eventHandler.delegate(key);
}
}
}
}
생각보다 간단하다.
주입받은 selector 객체를 이용해 이벤트들을 Set 자료구조로 얻은 다음, 루프를 돌면서 이벤트 핸들러에 처리를 위임한다.
근데 저 클래스는 어떻게 테스트할 수 있을까?
난감하다.
애초에 클래스 설계에서부터 이 클래스는 반환값이 없는 부수효과를 기반으로 한 클래스다.
이벤트가 들어오면 이벤트를 핸들러로 위임하는게 역할의 전부인데, 위임하는 일 자체는 아무것도 반환하지 않는 부수효과다.
그리고 테스트한다면 뭘 테스트 해야하는걸까? 핸들러가 제대로 호출되는지 테스트해야되나? 그런데 호출의 여부는 코드에서 이미 명시적으로 나와있지 않나? 이는 코드가 제대로 기능을 하는지 여부와는 다른데, 이를테면 더 로우레벨의 이야기가 아닌가?
결론
단위 테스트로 이 클래스의 기능을 테스트하는 것은 의미가 없어보인다.
이 메서드가 관여하는 프로세스의 흐름을 측정해야 하는데, 이를 위해서는 일련의 '동작 테스트'가 필요해보인다.
내가 말한 '동작 테스트'는 여러 컴포넌트들을 조합해 여러 시나리오를 이용해 특정 결과를 내는지 알아보는 테스트다.
'Toy Project > 채팅 앱 만들기' 카테고리의 다른 글
[채팅앱][클라이언트] EventHandler 클래스 및 아키텍처 수정 (0) | 2020.02.28 |
---|---|
[채팅앱][클라이언트] EventHandler 클래스 설계 (0) | 2020.02.27 |
[채팅앱][클라이언트] SelectorManager 클래스 작성하기 (0) | 2020.02.27 |
[채팅앱][클라이언트] 이벤트 아키텍쳐 설계 (0) | 2020.02.27 |
[채팅앱][전체] 앱의 전체적인 흐름 ver 1.0 (0) | 2020.02.27 |
Comments