1

要求:使用 Java 集合框架中的组件之一容纳多个作者。需要一本带有 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());
    }
}

图书.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);
    }
}
4

4 回答 4

0

测试类中的 isbn 是一个局部变量,您没有为其设置任何值。要检查对象是否创建正确,请尝试打印 book.getAuthorList() 和 book.getIsbn()

于 2015-07-21T18:30:15.293 回答
0

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

在这里,您将值设置isbn为在Book课堂上可用。

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

isbn但是在这里,您正在尝试当前课程中存在的print 。所以它不会打印任何值。因为你没有传递任何价值给它。

要打印 的值isbn,可在Book类中写入

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


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

这里也是authorList一个局部变量。打印值authorListBook类中可用

   System.out.println("Author List: " + book.authorList());
于 2015-07-21T18:31:18.500 回答
0

在 BookTest 中,您打印出 BookTest 范围内 isbn 的值。您在 BookTest 中对其进行了初始化,因此对 isbn 的任何调用都将引用全局变量

private String isbn;

您需要打印出 Book 对象的 isbn 字段。

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

您编写了 getter 方法,只是忘记使用它。

于 2015-07-21T18:32:08.893 回答
0

当访问ISBNandauthorList你应该使用他们的 getter 方法。在您的测试中,没有String名为ISBN. 而是使用book.getIsbn();

其他一些事情:

validate()方法中;authorListList不是一个String所以authorList.equals("")永远不会返回 true。你应该做类似的事情authorList.size() == 0return true也不需要在{}.

此外,您不应该只尝试打印列表 ( System.out.println("Author List: " + authorList);)。你可能会得到非常意想不到的结果。

于 2015-07-21T18:37:06.410 回答