Enum


구현 코드


package main;

import java.util.HashMap;
import java.util.Map;

public enum SoundType {

MUTE("mute", 1), PLAY("play", 2), STOP("stop", 3);

private static final Map<String, SoundType> CODE_NAME;
private static final Map<Integer, SoundType> CODE_ID;

static {
CODE_NAME = new HashMap<String, SoundType>();

for (SoundType soundType : values()) {
CODE_NAME.put(soundType.getDescription(), soundType);
}

CODE_ID = new HashMap<Integer, SoundType>();

for (SoundType soundType : values()) {
CODE_ID.put(soundType.val(), soundType);
}
}

private int val;
private String description;

public static SoundType fromCodeName(String codeName) {
return CODE_NAME.containsKey(codeName) ? CODE_NAME.get(codeName) : null;
}

public static SoundType fromCode(int code) {
return CODE_ID.containsKey(code) ? CODE_ID.get(code) : null;
}

SoundType(String desc, int val) {
this.description = desc;
this.val = val;
}

public String getDescription() {
return description;
}

public int val() {
return val;
}

}


테스트코드


package test;

import static org.junit.Assert.*;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;

import main.SoundType;

public class SounTypeTest {

@Test
public void enumTest() {

assertEquals("mute", SoundType.MUTE.getDescription());
assertEquals("play", SoundType.PLAY.getDescription());
assertEquals("stop", SoundType.STOP.getDescription());

String[] enumKeys = {"mute", "play", "stop"};

int i = 0;
for (SoundType st : SoundType.values()) {
assertEquals(enumKeys[i].toUpperCase(), st.name());
assertEquals(enumKeys[i++], st.getDescription());
}

assertEquals("MUTE", SoundType.MUTE.name());
assertEquals(1, SoundType.MUTE.val());
assertEquals("MUTE", SoundType.valueOf("MUTE").toString());
assertEquals("MUTE", SoundType.valueOf(SoundType.class, "MUTE").toString());
assertEquals(3, SoundType.values().length);

assertEquals(SoundType.MUTE, SoundType.fromCodeName("mute"));
assertEquals(SoundType.PLAY, SoundType.fromCodeName("play"));

assertEquals(SoundType.MUTE, SoundType.fromCode(1));
assertEquals(SoundType.PLAY, SoundType.fromCode(2));
assertEquals(SoundType.STOP, SoundType.fromCode(3));

assertThat("1", is("1"));
assertThat(SoundType.fromCode(1), is(SoundType.MUTE));
assertThat(SoundType.fromCode(2), is(SoundType.PLAY));

assertThat(SoundType.fromCode(4), nullValue());

}
}

댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드

우분투에서 테스트링크(testlink)와 맨티스(mantis)로 테스팅 서버 구성하기