2016-01-07 4 views
-2

Это первый раз, когда мне пришлось написать J Unit Test, и я зациклился на том, как начать работу. Этот класс представляет собой одну ячейку на плате Othello, у которой есть значение сетки и токена.JUnit Тестирование класса

Я хотел протестировать конструктор как с «черным», так и «белым» и разными местоположениями, и я также хотел протестировать все сеттеры и геттеры.

Любая помощь была бы принята с благодарностью.

public class BoardCell 
{ 
    /** 
    * The Item at this BoardCell. 
    */ 
    private Item token; 

    /** 
    * The CellLocation of this BoardCell. 
    */ 
    private BoardLocation location; 

    /** 
    * Constructor. 
    * @param row the row number. 
    * @param col the column number. 
    * @param token the Item value. 
    */ 
    public BoardCell(int row, int col, Item token) 
    { 
     this.token = token; 
     location = new BoardLocation(row, col); 
    } 

    /** 
    * Sets the Item value. 
    * @param token the Item value. 
    */ 
    public void setItem(Item token) 
    { 
     this.token = token; 
    } 

    /** 
    * Set the value of the Item in this BoardCell. 
    * @param val the value of the Item. 
    */ 
    public void setValue(String val) 
    { 
     this.token.setValue(val); 
    } 

    /** 
    * Gets the Item value. 
    * @return the Item at this BoardCell. 
    */ 
    public Item getItem() 
    { 
     return token; 
    } 

    /** 
    * Get the BoardLocation for this BoardCell. 
    * @return the BoardLocation for this BoardCell. 
    */ 
    public BoardLocation getLocation() 
    { 
     return location; 
    } 
} 
+0

Вы используете IntelliJ? Если да, попробуйте выделить BoardCell и удерживайте Shift-Ctrl-T. Он построит для вас тест. – rajah9

ответ

2

Было бы лучше начать с информацией о junit site и некоторые учебники. Кроме того, наилучшей практикой является сначала написать тест, а затем функцию, которую он тестирует. Тем не менее, вот общая схема:

1) Придумайте список тестов, которые вы хотите. Сосредоточьтесь на каждой функции и различных способах ее использования (и как это может пойти не так).

2) Написать тесты, которые сравнивают ожидаемое поведение реального поведения, что-то вроде этого:

@Before 
    public void setUp() { 
     // In this function you'll want to create instances of the class that you will then test 
    } 

    @Test 
    public void testSomething() { 
    assertEquals(BoardCell.getItem(), whatever you think it should equal); //or whatever you're testing 
    } 

    @Test 
    public void etcetera() . . . 
+1

Почему бы не использовать assertEquals? Он обеспечивает лучшую производительность, если объекты не равны (если вы переопределите метод toString) –

4

Вы должны начать с создания нового класса, который будет содержать все ваши различные тесты, можно назвать, скажем, , BoardCellTest или BoardCellTestCase.

В этом классе вам нужно будет добавить свои различные тестовые примеры: public void методы, аннотированные @Test.

Каждый метод должен затем утверждать (с помощью методов класса Assert), что вам нужно проверить, создав правильные объекты BoardCell и получив их значения или установив новые.

0

Вы ищете покрытие кода или просто видите, работает ли метод так, как вы его намеревались? Если вы просто ищете охват, просто создайте класс и добавьте аннотации методам с помощью @Test, большинство инструментов покрытия подберут отчеты JUnit/Surefire и правильно их интерпретируют.

Если вы хотите проверить что-то вроде геттера или сеттера, вы можете использовать простой тест утверждения.

@Test 
public void testGetItem() throws Exception { 
    Item item = new BlackItem(); 
    BoardCell cell = new BoardCell(128, 256, item); 
    assertNotNull("item should not be null", cell.getItem()); 
    assertEquals("items should be considered equal", item, cell.getItem()); 
} 

Если переопределить toString в классе, то JUnit будет сподручно распечатать результат toString если утверждение не удается, это верно для assertEquals, assertArrayEquals (я считаю) и assertThat. У меня нет точной копии, за исключением в руки, но это будет что-то вдоль линий этого:

org.junit.AssertionError: Expected Item{name="Black Item"} but was Item{name="White Item"} 
Expected: Item{name="Black Item"} 
Actual: Item{name="White Item"} 

Что-то, что может пригодиться для проверки равенства BoardLocation и Item объектов. Хорошим местом для ознакомления с утверждениями будет сайт JUnit, упомянутый другим плакатом и их GitHub wiki, которые я лично предпочитаю.

Смежные вопросы