Тестовые примеры проходят при индивидуальном запуске и завершаются неудачей при совместном запуске

#java #eclipse #unit-testing #junit #test-class

Вопрос:

Отображение ошибки в классе, где я пытаюсь получить значения статического ArrayList<ArrayList> adjacent_list_train=new ArrayList<ArrayList>(); который возвращает ошибку типа: java.lang .Исключение IndexOutOfBoundsException: индекс 1 выходит за пределы длины 1. Проблема в статической переменной?

 class Node{

    
    static ArrayList<ArrayList<TrainVertices>> adjacent_list_train=new ArrayList<ArrayList<TrainVertices>>(); 
public void CList(){
      //error thrown at the following line
    if(FlightEdges.size>0) {
            if(!adjacent_list.isEmpty()) {
                for(int i=0;i<adjacent_list.size();i  ) {
//error line
                    ArrayList<FlightEdges> fe_al=adjacent_list.get(i);
}
}
 

По моим наблюдениям, речь идет о том, что доступ к статической переменной осуществляется в нескольких тестовых классах. Поскольку я новичок в тестировании junit, не могли бы вы рассказать, что не так с тестовым классом

Комментарии:

1. Почему Node есть static переменная? static для переменных, которые связаны с классом, а не с отдельным экземпляром. У каждого Node есть то же adjancent_list_train самое? Если нет, то этого не должно быть static .

2. С учетом сказанного я предлагаю вам отладить свой код, чтобы выяснить, почему он ведет себя не так, как вы ожидаете или хотите. В этой статье есть советы, которые помогут вам начать.

3. Это для построения графика, где к этому полю обращаются другие классы для получения значения смежного узла

4. Является ли список общим для каждого Node экземпляра? Или Node у каждого должен быть свой собственный список? Это единственный вопрос, который важен при принятии решения о том, использовать или нет static . Место доступа к нему не имеет значения.

5. Еще один вопрос, который нужно задать: adjacent_list_train даже принадлежит Node вообще? Если другим классам требуется доступ к нему, возможно, этот список принадлежит где-то еще. Один из способов выяснить это — описать, что такое a Node ? Что представляет этот класс? Я предполагаю, что это узел на графике. Итак, сделайте шаг назад и подумайте о том, как вы представляете график в коде. Какое представление вы используете здесь? Похоже, у вас есть TrainVertices и FlightEdges как два других класса. Для общей структуры данных графа у вас должны быть гораздо более общие имена, такие как Vertex и Edge .