2015-11-28 3 views
0

Я просмотрел другие вопросы, связанные с перечислением, и по-прежнему не могу понять это.Java-тестирование enum

У меня есть Позиция Enum:

public enum Position 
{ 
    LEFT, MIDDLE, RIGHT; 
} 

и класс Tower:

public class Tower extends LinkedStack<Disc> 
{ 
    private Position position; 

    /** 
    * Tower implementation 
    * 
    * @param location the location of the tower 
    */ 
    public Tower(Position location) 
    { 
     super(); 
     this.position = location; 
    } 

    /** 
    * Position of the tower 
    * 
    * @return position the position of the tower 
    */ 
    public Position position() 
    { 
     return position; 
    } 

    /** 
    * Push method 
    * 
    * @param disc disc to be pushed 
    * @throws IllegalStateException if the disc cannot be pushed 
    */ 
    @Override 
    public void push(Disc disc) 
    { 
     Disc last = this.peek(); 
     if (this.isEmpty() || (last.compareTo(disc)) == 1) 
     { 
      super.push(disc); 
     } 
     else 
     { 
      throw new IllegalStateException(); 
     } 
    } 

}  

Тест на башне:

private Position LEFT; 
private Position MIDDLE; 
private Position RIGHT; 

private Tower t1; 
private Tower t2; 
private Tower t3; 

/** 
* 
*/ 
@Before 
public void setUp() 
{ 
    LEFT = Position.LEFT; 
    MIDDLE = Position.MIDDLE; 
    RIGHT = Position.RIGHT; 

    t1 = new Tower(LEFT); 
    t2 = new Tower(MIDDLE); 
    t3 = new Tower(RIGHT); 
} 

/** 
* Test method for Tower(Position). 
*/ 
@Test 
public final void testTower() 
{ 
    Tower t4 = new Tower(LEFT); 
} 

/** 
* Test method for position(). 
*/ 
@Test 
public final void testPosition() 
{ 
    assertEquals(LEFT, t1.position()); 
    assertEquals(MIDDLE, t2.position()); 
    assertEquals(RIGHT, t3.position()); 
    assertFalse(t3.position() == LEFT); 
} 

Есть причина, почему эти утверждения возвращаются null для позиции вместо LEFT, MIDDLE, RIGHT?

+4

Вы сделали 'место = позиция;', вы хотите 'положение = местоположение;'. Еще лучше: 'this.position = location;'. – Kenney

+2

'assertEquals', который сравнивает' String' с 'enum', всегда будет возвращать' false'. Используйте 'assertEquals (Position.LEFT, t1.position());' и т. Д. Вместо этого. –

+0

'assertFalse (t3.position() == LEFT);' может не работать, поскольку 'LEFT' определяется внутри метода' setUp'. Вы должны изменить 'LEFT' на' Position.LEFT' – uthavaakkarai

ответ

0

Я думаю, вы пропустили @Before аннотации перед вашим методом setUp.

+0

@ Перед тем, как случайно упал, когда я вставил свой код за – markleyjm

0

Либо сделать это один,

@Before 
public void setUp() 
{ 
    Position LEFT = Position.LEFT; 
    Position MIDDLE = Position.MIDDLE; 
    Position RIGHT = Position.RIGHT; 

    t1 = new Tower(LEFT); 
    t2 = new Tower(MIDDLE); 
    t3 = new Tower(RIGHT); 
} 

Или это,

@Test 
public final void testTower() 
{  
    setup(); 
    assertEquals("LEFT", t1.position()); 
    assertEquals("MIDDLE", t2.position()); 
    assertEquals("RIGHT", t3.position()); 
    assertFalse(t3.position() == LEFT); 
} 

Единственная причина, t1, t2 ... так далее не инициализации из-за нАлАдкА() не выполняется.

0

Ваш setUp недействителен. Измените его, чтобы инициализировать t1, t2 t3 &, которые должны заботиться о NPE

@Before 
public void setUp() 
{ 
    LEFT = Position.LEFT; 
    MIDDLE = Position.MIDDLE; 
    RIGHT = Position.RIGHT; 

    t1 = new Position(LEFT); 
    t2 = new Position(MIDDLE); 
    t3 = new Position(RIGHT); 
} 
+1

Он меняет код каждые 3 минуты -_-. И вы также допустили ошибку, так как t1 повторяется 3 раза вместо t1, t2, t3 соответственно. – damienix

+0

спасибо, исправлены имена переменных ... – uthavaakkarai