Доступ к списку в тестовом примере JUnit - PullRequest
4 голосов
/ 27 июня 2010

У меня есть это ParkingLot.java

 public class ParkingLot {

private final int size;
private Car[] slots = null;

List<String> list = new ArrayList<String>();

public ParkingLot(int size) {
    this.size = size;
    this.slots = new Car[size];
}

public List licenseWithAParticularColour(String colour) {
    for (int i = 0; i < slots.length; i++) {
        if (slots[i].getColour() == colour) {
            System.out.println(slots[i].getLicense());
            list.add(slots[i].getLicense());
            return list;
        }
    }
    return null;
}

}

Я создал ParkingLotTest.java следующим образом

public class ParkingLotTest {

private Car car1;
private Car car2;
private Car car3;

private Ticket ticket1;
private Ticket ticket2;
private Ticket ticket3;

private ParkingLot parkingLot;

private List<String> list = new ArrayList<String>();

@Before
public void intializeTestEnvironment() throws Exception {
    this.car1 = new Car("1234", "White");
    this.car2 = new Car("4567", "Black");
    this.car3 = new Car("0000", "Red");

    this.parkingLot = new ParkingLot(2);

    this.ticket1 = parkingLot.park(car1);
    this.ticket2 = parkingLot.park(car2);
    this.ticket3 = parkingLot.park(car3);
    this.list = parkingLot.list;


}

@Test
public void shouldGetLicensesWithAParticularColour() throws Exception {
    assertEquals(, parkingLot.licenseWithAParticularColour("White"));

}

}

В приведенном выше тестовом примере я хочу убедиться, что список заполнен правильными лицензиями. 1. Как создать поле в ParkingLotTest.java, чтобы список в первом классе совпадал со списком в файле второго класса.

Ответы [ 3 ]

5 голосов
/ 27 июня 2010

Во-первых, я не думаю, что вам нужно list на ParkingLot, поэтому ваш вопрос не имеет особого смысла :)

Во-вторых, просто установите ожидаемый результат в каждом методе теста:

public class ParkingLotTest {

    //...

    @Test
    public void shouldGetLicensesWithAParticularColour() throws Exception {
        List<Car> expected = new ArrayList<Car>();
        expected.add(...);

        assertEquals(expected, parkingLot.licenseWithAParticularColour("White"));
    }

}

И не забудьте также проверить неожиданные значения или особые случаи. Например:

@Test
public void shouldNotGetLicensesWithANullColour() throws Exception {
    ...
    assertEquals(expected, parkingLot.licenseWithAParticularColour(null));
}

@Test
public void shouldNotGetLicensesWithAnUnknownColour() throws Exception {
    ...
    assertEquals(expected, parkingLot.licenseWithAParticularColour("unknown"));
}

Некоторые дополнительные замечания:

  • Я бы не использовал Car[] для slots, но List<Car>.
  • Вам не нужно List<String> list в ParkingLot (а текущая реализация licenseWithAParticularColour содержит ошибки).
  • Я бы использовал Enum для цвета.
2 голосов
/ 27 июня 2010

Как вы хотите?

Это немного шутка, но, тем не менее, вы обычно создаете List, и все будет хорошо - если это соответствует тому, что вы хотите, чтобы ваш список протестированных интерфейсов был.*

В этом конкретном случае я бы порекомендовал создать List<Car> в качестве контрольного задания, а затем посетить каждый Car и парковать его.Затем вы можете построить список лицензий из этого списка и сравнить его с парковкой.Просто убедитесь, что ваше направление итерации правильное.

Кстати, из того, что я вижу, я не думаю, что вещи работают так, как они должны работать - хорошо, что вы тестируете это.

1 голос
/ 28 июня 2010

Ответ Паскаля сработал для меня.

@ Pascal Опять я сделал эту функцию:

public List getSlotNumbersWithAParticularColour(String colour) {
        List<Integer> listOfTicketsWithAColour = new ArrayList<Integer>();
        for (int i = 0; i < slots.length;) {
            if (slots[i].getColour() == colour) {
                listOfTicketsWithAColour.add(i);

            }
            return listOfTicketsWithAColour;

        }
        return null;
    }

Ошибка не в цикле for, добавление i ++ - это "мертвый код""в соответствии с Eclipse.Добавление i ++ не вызывает никакой разницы.

И соответствующий контрольный пример:

public void getSlotNumbersWithAGivenColour() throws Exception {
        List<String> expected = new ArrayList<String>();
        expected.add("0");
        expected.add("3");

        assertEquals(expected, parkingLot.getSlotNumbersWithAParticularColour("White"));
    }

Тест не пройден.Функция возвращает только 0 вместо 0,3.Есть идеи почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...