Question
I need to design a JUnit test that will test the functionality of the file Book.Java. I have included the test file that I have
I need to design a JUnit test that will test the functionality of the file Book.Java. I have included the test file that I have made thus far, but it is coming back as failing the necessary tests, and I am not sure as to why. This is for a Test Driven Development. I think I have the implementation mostly correct, but I need to know where I am lacking. Also, I am not sure how he is going to implement the boolean, so it leaves me unsure as to how to set up the test. I have completed parts of the program so that I can test my code, and most of it is working. I just need some advice on where I need to go from here.
Book.java
package edu.odu.cs.cs350;
import java.util.Iterator;
/** * A book object as it might be recorded in a publisher's catalog or a library. * *
* This is not a capture of the contents of the book, but of the metadata that * describes the book: authors, title, etc. * * @author zeil * */ public class Book implements Cloneable, Iterable
private String title1; String publisher1; String isbn1;
/** * Create a "blank" book with empty strings for title, publisher, ISBN and * an empty (zero-length) list of authors. */ public Book() { title1 = ""; publisher1 = ""; isbn1 = ""; }
/** * Create a new book. * * @param title * title of the book * @param publisher * publisher of the book. * @param isbn * ISBN identifier for the book. * @param authors * list of authors for this book. */ public Book(String title, String publisher, String isbn, Author[] authors) { // TODO }
/** * Get the title of this book. * * @return the title */ public String getTitle() {
return this.title1; }
/** * Set the title of this book. * * @param title * the title to set */ public void setTitle(String title) { this.title1 = title; }
/** * Get the ISBN of this book. * * @return the ISBN */ public String getISBN() {
return this.isbn1; }
/** * Set the ISBN of this book. * * @param isbn * the isbn to set */ public void setISBN(String isbn) { this.isbn1 = isbn; }
/** * Get the publisher of this book. * * @return the publisher */ public String getPublisher() { // TODO return this.publisher1; }
/** * Set the publisher of this book. * * @param publisher * the publisher to set */ public void setPublisher(String publisher) { this.publisher1 = publisher; }
/** * How many authors does this book have? * * @return number of authors */ public int numAuthors() { // TODO return 0; }
/** * Add an author to the end of the books's list (if that author is not * already in there). * * @param au * author to be added */ public void addAuthor(Author au) { // TODO }
/** * Render the book as a string in a format guaranteed to contain all fields. */ public String toString() { // TODO return ""; }
// Comparison and hashing
/** * Compares two books for equality. They are considered equal if they have * the same ISBN. * * @param obj * object to be compared for equality with this duration * @return true if the specified object is equal to this one */ public boolean equals(Object obj) { // TODO return false; }
/** * Returns the hash code value for this object. * * @return the hash code value for this book */ public int hashCode() {
return (2 * this.title1.length() + 4 * this.isbn1.length() + 8 * this.publisher1.length());
}
/** * Return a (deep) copy of this object. */ @Override public Object clone() { // TODO return null; }
/** * Provide access to the list of authors. e.g., Book book = new Book(...); * for (Author au: book) { doSomethingWithAuthor (au); } * * @return iterator over the authors. */ public Iterator
}
Author.java
package edu.odu.cs.cs350;
/** * An author of a book. Currently, this contains only the author's name. * * @author zeil * */ public class Author implements Cloneable, Comparable
/** * The surname ("family name") of this author. */ private String surname;
/** * The given name ("personal name" or "first name") of the author. */ private String givenName;
/** * Create an author. * * @param givenName * the personal name of the author * @param surname * the family name of the author */ public Author(String givenName, String surname) { this.givenName = givenName; this.surname = surname; }
/** * Compare two authors for equality. * * @param obj * another author * @return true ff they have the same name */ public boolean equals(Object obj) { if (obj instanceof Author) { Author au = (Author) obj; return givenName.equals(au.givenName) && surname.equals(au.surname); } else { return false; } }
/** * Get the name of the author in a form suitable for sorting. surname, * givenName * * @return sortable name of the author */ public String getSortingName() { return surname + ", " + givenName; }
/** * Return the author's name in conventional form. givenName surname */ public String toString() { return givenName + " " + surname; }
/** * Return the surname of this author * * @return the surname */ public String getSurname() { return surname; }
/** * Return the given name of this author * * @return the given name */ public String getGivenName() { return givenName; }
/** * Compare this author to another, returning a negative value if this author * should follow the other in a sorted list, zero if they are equal, and a * positive value if this author should precede the other in a sorted list. * * @param au * the other author to be compared against. * @return number whose sign indicates the comparison result */ public int compareTo(Author au) { return getSortingName().compareTo(au.getSortingName()); }
}
TestBook.java
package edu.odu.cs.cs350;
import static org.junit.Assert.*; import org.junit.Test; public class TestBook {
@Test public void testSetTitle() { Book title = new Book(); int oldHashCode = title.hashCode(); title.setTitle("abcde"); assertEquals( "abcde", title.getTitle()); assertEquals("", title.getISBN()); assertEquals("", title.getPublisher()); assertNotEquals(oldHashCode, title.hashCode()); } @Test public void testSetISBN() { Book ISBN = new Book(); int oldHashCode = ISBN.hashCode(); ISBN.setISBN("123-456-789"); assertEquals("123-456-789", ISBN.getISBN()); assertEquals("", ISBN.getTitle()); assertEquals("", ISBN.getPublisher()); assertNotEquals(oldHashCode, ISBN.hashCode()); } @Test public void testDuplicateISBN() { Book newBook = new Book(); int oldHashCode = newBook.hashCode(); newBook.setISBN("123-456-789"); Book Repeat = new Book(); Repeat.setISBN("123-456-789"); assertNotEquals(oldHashCode, newBook.hashCode()); assertNotEquals(Repeat.getISBN(), newBook.getISBN()); } @Test public void testSetPublisher() { Book Publisher = new Book(); int oldHashCode = Publisher.hashCode(); Publisher.setPublisher("abcde");
assertEquals("abcde", Publisher.getPublisher()); assertEquals("", Publisher.getTitle()); assertEquals("", Publisher.getISBN()); assertNotEquals(oldHashCode, Publisher.hashCode()); }
@Test
public void testAddAuthor() { Author Auth = new Author("abc", "def"); Book test = new Book(); test.addAuthor(Auth); assertEquals("abc", Auth.getGivenName()); assertEquals("def", Auth.getSurname()); assertEquals("def, abc", Auth.getSortingName()); }
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started