bookTest.java распечатывает список авторов arrayList, но не isbn

Требования: допускать нескольких авторов, использующих один из компонентов Java Collection Framework. Требуется одна книга с ISBN и Коллекция авторов. JUnit: руководство для testValidate: проверьте как минимум два случая (один случай, когда свойства книги содержат правильные типы данных, не являются пустыми и не содержат нулевого значения, а другой — нет). Руководство для testEquals: проверьте по крайней мере два случая (один случай, когда авторы и isbn совпадают, и один, когда они не совпадают). Тест не менее двух авторов. Мой учитель сказал мне: testEquals нужно добавить isbn и двух авторов. Создайте список массивов. Добавьте к нему двух авторов. Создайте объект Book и добавьте экземпляр ArrayList и файл isbn. Я думаю, что это то, что я сделал, авторы печатают, но ISBN нет. Я абсолютный новичок и я в растерянности! Кто-нибудь может помочь?

ИЗМЕНИТЬ/ДОБАВИТЬ Я получил ISBN для печати, но печатаю только второй ISBN, который у меня есть. Что мне нужно изменить, чтобы они оба печатались? Или это имеет значение?

Вот результат:

Testsuite: library.domain.BookTest
equals
Author List: [Bob Smith, Jane Doe]
ISBN: 67890
validate
Author List: [Bob Smith, Jane Doe]
ISBN: 67890
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.23 sec

------------- Standard Output ---------------
equals
Author List: [Bob Smith, Jane Doe]
ISBN: 67890
validate
Author List: [Bob Smith, Jane Doe]
ISBN: 67890
------------- ---------------- ---------------
test:
Deleting: /var/folders/k7/wpgy3lw91171qxlzt4pj0cfh0000gn/T/TEST-library.domain.BookTest.xml
BUILD SUCCESSFUL (total time: 1 second)

Вот моя новая страница:

НОВЫЙ BookTest.java

package library.domain;

import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class BookTest {

    private ArrayList<String> authorList = new ArrayList<>();

    @Test
    public void testEquals()                //test Equals() for accuracy
    {
        System.out.println("equals");
        authorList.add("Bob Smith");
        Book book = new Book("12345", authorList);
        assertEquals("expected true", true, book.equals(book));
        authorList.add("Jane Doe");
        book = new Book("67890", authorList);
        assertEquals("expected true", true, book.equals(book));
        System.out.println("Author List: " + authorList);
        System.out.println("ISBN: " + book.getIsbn());
    }

    @Test
    public void testValidate()          //test Validate() for accuracy
    {
        System.out.println("validate");
        authorList.add("Bob Smith");
        Book book = new Book("12345", authorList);
        assertEquals("expected true", true, book.validate());
        authorList.add("Jane Doe");
        book = new Book("67890", authorList);
        assertEquals("expected true", true, book.validate());
        System.out.println("Author List: " + authorList);
        System.out.println("ISBN: " + book.getIsbn());
    }
}

Book.java

package library.domain;

import java.util.ArrayList;
import java.util.Objects;

public class Book {

    private String isbn;
    private ArrayList<String> authorList;

    public Book(String isbn, ArrayList<String> authorList)
    {
        this.isbn = isbn;
        this.authorList = authorList;
    }

    public String getIsbn()             //access to isbn and manages  next value
    {
        return isbn;
    }

    public void setIsbn(String isbn)            //assigns the input isbn to the data member isbn
    {
        this.isbn = isbn;
    }
//assigns the input author to the data member author

    public ArrayList<String> getAuthorList()
    {
        return authorList;
    }

    public void setAuthorList(ArrayList<String> authorList)
    {
        this.authorList = authorList;
    }

    @Override
    public boolean equals(Object obj)           //checks  equality of two objects - true if same, false if different
    {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Book)) {
            return false;
        }

        Book book = (Book) obj;
        if (!this.isbn.equals(book.isbn)) {
            return false;
        }
        if (!this.authorList.equals(book.authorList)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode()           //override hash
    {
        int hash = 7;
        hash = 97 * hash + Objects.hashCode(this.authorList);
        hash = 97 * hash + Objects.hashCode(this.isbn);
        return hash;
    }

    public boolean validate()           //validate isbn and author not null
    {
        if (isbn == null || isbn.equals("")) {
            return false;
        }
        if (authorList == null || authorList.equals("")) {
            return false;
        }
        {
            return true;
        }
    }
}

BookTest.java

package library.domain;

import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class BookTest {

    private ArrayList<String> authorList = new ArrayList<>();
    private String isbn;

    @Test
    public void testEquals()                //test Equals() for accuracy
    {
        System.out.println("equals");
        authorList.add("Bob Smith");
        authorList.add("Jane Doe");
        Book book = new Book("12345", authorList);
        assertEquals("expected true", true, book.equals(book));
        System.out.println("Author List: " + authorList);
        System.out.println("ISBN: " + isbn);
    }

    @Test
    public void testValidate()          //test Validate() for accuracy
    {
        System.out.println("validate");
        authorList.add("Bob Smith");
        authorList.add("Jane Doe");
        Book book = new Book("12345", authorList);
        assertEquals("expected true", true, book.validate());
        System.out.println("Author List: " + authorList);
        System.out.println("ISBN: " + isbn);
    }
}

person user2719471    schedule 21.07.2015    source источник
comment
isbn доступен в book классе и authorList в текущем классе.   -  person SatyaTNV    schedule 21.07.2015
comment
чтобы сделать комментарий @Satya более понятным: у вас есть локальная переменная с именем isbn, но вы не вводите значение. Вы должны удалить ее и вместо этого вызвать book.getIsbn().   -  person havogt    schedule 21.07.2015
comment
isbn не инициализирован в классе BookTest   -  person Some guy    schedule 21.07.2015


Ответы (4)


isbn в тестовом классе является локальной переменной, и вы не устанавливаете для нее никаких значений. Чтобы проверить, правильно ли создается объект, попробуйте напечатать book.getAuthorList() и book.getIsbn().

person digidude    schedule 21.07.2015
comment
Это сработало! Спасибо ОГРОМНОЕ! Теперь о следующей части моего задания. - person user2719471; 21.07.2015

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

private String isbn;

Вам нужно распечатать поле isbn объекта Book.

System.out.println("ISBN: " + book.getIsbn());

У вас был написан метод геттера, вы просто забыли его использовать.

person Jeremy Fisher    schedule 21.07.2015

При доступе к ISBN и authorList вы должны использовать их методы получения. В вашем тесте нет объекта String с именем ISBN. Вместо этого используйте book.getIsbn();

Некоторые другие вещи:

В методе validate(); authorList - это List, а не String, поэтому authorList.equals("") никогда не вернет true. Вы должны сделать что-то вроде authorList.size() == 0. Также return true не обязательно должно быть внутри {}.

Также не стоит пытаться просто распечатать список (System.out.println("Author List: " + authorList);). Вы можете получить очень неожиданные результаты.

person cbender    schedule 21.07.2015

Book book = new Book("12345", authorList);

Здесь вы устанавливаете значение isbn, доступное в классе Book.

   System.out.println("ISBN: " + isbn);

Но здесь вы пытаетесь напечатать isbn, который присутствует в текущем классе. Поэтому он не печатает никакого значения. Поскольку вы не передаете ему никакого значения.

Чтобы вывести значение isbn, доступное в классе Book, напишите

   System.out.println("ISBN: " + book.getIsbn());


   System.out.println("Author List: " + authorList);

Здесь также authorList является локальной переменной. Для печати значение authorList доступно в записи класса Book

   System.out.println("Author List: " + book.authorList());
person SatyaTNV    schedule 21.07.2015
comment
Я изменил на печать book.isbn и получил ошибки: testEquals(library.domain.BookTest): Некомпилируемый исходный код - isbn имеет частный доступ в library.domain.Book - person user2719471; 21.07.2015
comment
Я обновил свой ответ. позвоните book.getIsbn() и book.authorList(). так как isbn является private переменной. поэтому мы не можем получить доступ за пределами класса, например book.isbn. - person SatyaTNV; 21.07.2015