我有一个enum和一个对象,我想在junit测试中验证uniqeness。
例如,我有一个枚举颜色,如下所示:
public enum Colors{
Yellow("This is my favorite color"),
Blue("This color is okay"),
Orange("I do not like this color"),
Green("I hate this color");
private String value;
Colors(String value) {
this.value = value;
}
public String getDescription() {
return value;
}
}
我还有一个名为ColorList的ArrayList,它包含具有两个属性的Color对象:value和description。我想验证ColorList以测试有四个Color对象包含枚举中的值。如果有的话,我希望我的测试失败:
答案 0 :(得分:1)
请检查以下junit测试用例,这些测试用例将在您指定的情况下失败。
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
enum Colors {
Yellow("This is my favorite color"), Blue("This color is okay"), Orange(
"I do not like this color"), Green("I hate this color");
String value;
Colors(String value) {
this.value = value;
}
public String getDescription() {
return value;
}
}
public class JunitSample {
private List<Colors> smallList;
private List<String> largeList;
@Before
public void setUp() {
smallList = new ArrayList<Colors>();
largeList = new ArrayList<String>();
// Not keeping yellow in smallList.
smallList.add(Colors.Blue);
smallList.add(Colors.Green);
smallList.add(Colors.Orange);
largeList.add("Blue");
largeList.add("Green");
largeList.add("Orange");
largeList.add("Yellow");
largeList.add("Red"); // Red is not defined in Colors Enum class
}
@Test
public void testColorsWhichAreNotThereInEnum() {
for(String value : largeList){
Assert.assertNotNull("value not available", Colors.valueOf(value));
}
}
@Test
public void testColorsWhichAreNotThereInSmallList() {
for(Colors color : Colors.values()){
Assert.assertEquals("Color not availale in list",true, smallList.contains(color));
}
}
}
答案 1 :(得分:1)
我认为你可以用EnumSet
做你想做的事。这将确保您只拥有一次所有颜色,除此之外别无其他颜色。
EnumSet<Colors> allColors = EnumSet.allOf(Colors.class);
以下是我的游戏,以防万一:
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.util.EnumSet;
import org.junit.Test;
public class TempTest {
@Test
public void x() {
EnumSet<Colors> allColors = EnumSet.allOf(Colors.class);
assertEquals(4, allColors.size());
assertThat(allColors, contains(Colors.Yellow, Colors.Blue, Colors.Orange, Colors.Green));
for (Colors c : allColors) {
System.out.println(c.name() + " (" + c.getDescription() + ")");
}
}
}
获得一个绿色条并打印:
Yellow (This is my favorite color)
Blue (This color is okay)
Orange (I do not like this color)
Green (I hate this color)
顺便说一句,我在Eclipse中遇到了编译错误:你的枚举值列表以逗号而不是分号结尾。
另外,在几个样式点上,我不知道你是否能够更改枚举,但是,如果可以的话,Java中的常规约定是在ALL_CAPS
中使用枚举值并且使枚举类名称为单数(而不是复数)-eg你可以称之为public enum NamedColor { YELLOW, RED; }
。您也可以将value
重命名为description
,以使其目的更加明确。