繁体   English   中英

assertEquals失败测试,​​尽管列表相同

[英]assertEquals fail tests despite same lists

我想测试两个列表的相等性-实际的(由测试方法返回)和预期的(由我硬编码)。 我正在看这两个列表一个小时,但看不到它们之间的任何区别。

堆栈跟踪:

java.lang.AssertionError: expected: java.util.Arrays$ArrayList<[Book{title='Pokrzyk', author='Puzyńska Katarzyna'}, Book{title='Odbiorę ci wszystko', author='Lillegraven Ruth'}, Book{title='Nóż. Harry Hole. Tom 12', author='Nesbo Jo'}, Book{title='Za zamkniętymi drzwiami', author='Paris B.A.'}, Book{title='Coraz większy mrok', author='Hoover Colleen'}, Book{title='Ta, która musi umrzeć', author='Lagercrantz David'}, Book{title='Teraz zaśniesz', author='Taylor C. L.'}, Book{title='Na skraju załamania', author='Paris B.A.'}, Book{title='Listy zza grobu', author='Mróz Remigiusz'}, Book{title='Rewizja. Joanna Chyłka. Tom 3', author='Mróz Remigiusz'}, Book{title='Odwet', author='Severski Vincent V.'}, Book{title='Immunitet. Joanna Chyłka. Tom 4', author='Mróz Remigiusz'}, Book{title='Inwigilacja. Joanna Chyłka. Tom 5', author='Mróz Remigiusz'}, Book{title='Zniknięcie Annie Thorne', author='Tudor C. J.'}, Book{title='Kontratyp. Joanna Chyłka. Tom 8', author='Mróz Remigiusz'}]> but was: java.util.ArrayList<[Book{title='Pokrzyk', author='Puzyńska Katarzyna'}, Book{title='Odbiorę ci wszystko', author='Lillegraven Ruth'}, Book{title='Nóż. Harry Hole. Tom 12', author='Nesbo Jo'}, Book{title='Za zamkniętymi drzwiami', author='Paris B.A.'}, Book{title='Coraz większy mrok', author='Hoover Colleen'}, Book{title='Ta, która musi umrzeć', author='Lagercrantz David'}, Book{title='Teraz zaśniesz', author='Taylor C. L.'}, Book{title='Na skraju załamania', author='Paris B.A.'}, Book{title='Listy zza grobu', author='Mróz Remigiusz'}, Book{title='Rewizja. Joanna Chyłka. Tom 3', author='Mróz Remigiusz'}, Book{title='Odwet', author='Severski Vincent V.'}, Book{title='Immunitet. Joanna Chyłka. Tom 4', author='Mróz Remigiusz'}, Book{title='Inwigilacja. Joanna Chyłka. Tom 5', author='Mróz Remigiusz'}, Book{title='Zniknięcie Annie Thorne', author='Tudor C. J.'}, Book{title='Kontratyp. Joanna Chyłka. Tom 8', author='Mróz Remigiusz'}]>
Expected :java.util.Arrays$ArrayList<[Book{title='Pokrzyk', author='Puzyńska Katarzyna'}, Book{title='Odbiorę ci wszystko', author='Lillegraven Ruth'}, Book{title='Nóż. Harry Hole. Tom 12', author='Nesbo Jo'}, Book{title='Za zamkniętymi drzwiami', author='Paris B.A.'}, Book{title='Coraz większy mrok', author='Hoover Colleen'}, Book{title='Ta, która musi umrzeć', author='Lagercrantz David'}, Book{title='Teraz zaśniesz', author='Taylor C. L.'}, Book{title='Na skraju załamania', author='Paris B.A.'}, Book{title='Listy zza grobu', author='Mróz Remigiusz'}, Book{title='Rewizja. Joanna Chyłka. Tom 3', author='Mróz Remigiusz'}, Book{title='Odwet', author='Severski Vincent V.'}, Book{title='Immunitet. Joanna Chyłka. Tom 4', author='Mróz Remigiusz'}, Book{title='Inwigilacja. Joanna Chyłka. Tom 5', author='Mróz Remigiusz'}, Book{title='Zniknięcie Annie Thorne', author='Tudor C. J.'}, Book{title='Kontratyp. Joanna Chyłka. Tom 8', author='Mróz Remigiusz'}]> 
Actual   :java.util.ArrayList<[Book{title='Pokrzyk', author='Puzyńska Katarzyna'}, Book{title='Odbiorę ci wszystko', author='Lillegraven Ruth'}, Book{title='Nóż. Harry Hole. Tom 12', author='Nesbo Jo'}, Book{title='Za zamkniętymi drzwiami', author='Paris B.A.'}, Book{title='Coraz większy mrok', author='Hoover Colleen'}, Book{title='Ta, która musi umrzeć', author='Lagercrantz David'}, Book{title='Teraz zaśniesz', author='Taylor C. L.'}, Book{title='Na skraju załamania', author='Paris B.A.'}, Book{title='Listy zza grobu', author='Mróz Remigiusz'}, Book{title='Rewizja. Joanna Chyłka. Tom 3', author='Mróz Remigiusz'}, Book{title='Odwet', author='Severski Vincent V.'}, Book{title='Immunitet. Joanna Chyłka. Tom 4', author='Mróz Remigiusz'}, Book{title='Inwigilacja. Joanna Chyłka. Tom 5', author='Mróz Remigiusz'}, Book{title='Zniknięcie Annie Thorne', author='Tudor C. J.'}, Book{title='Kontratyp. Joanna Chyłka. Tom 8', author='Mróz Remigiusz'}]>

我看到的唯一区别是,期望行的末尾是空白,不知道为什么,但是我认为它不应使我的测试失败,因为它可以测试元素是否相同。

测试:

package bookstore.scraper.fetcher.empik;

import bookstore.scraper.book.Book;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;

import static org.junit.Assert.assertEquals;

@SpringBootTest
@RunWith(SpringRunner.class)
public class EmpikFetchingBookServiceTest {

    @Autowired
    EmpikFetchingBookService empikFetchingBookService;

    @Test
    public void get15BooksFromCrimeCategory() throws IOException {
        File in = getFile("/CrimeCategoryEmpik.html");
        Document doc = Jsoup.parse(in, "UTF-8");

        List<Book> actualBooks = empikFetchingBookService.get15BooksFromCategory(doc);
        List<Book> expectedBooks = prepare15CrimeBooks();

        assertEquals(expectedBooks, actualBooks);
    }

    private static File getFile(String resourceName) {
        try {
            return new File(EmpikFetchingBookServiceTest.class.getResource(resourceName).toURI());
        } catch (URISyntaxException e) {
            throw new IllegalStateException(e);
        }
    }

    private List<Book> prepare15CrimeBooks() {
        return Arrays.asList(
                new Book.BookBuilder().withAuthor("Puzyńska Katarzyna").withTitle("Pokrzyk").build(),
                new Book.BookBuilder().withAuthor("Lillegraven Ruth").withTitle("Odbiorę ci wszystko").build(),
                new Book.BookBuilder().withAuthor("Nesbo Jo").withTitle("Nóż. Harry Hole. Tom 12").build(),
                new Book.BookBuilder().withAuthor("Paris B.A.").withTitle("Za zamkniętymi drzwiami").build(),
                new Book.BookBuilder().withAuthor("Hoover Colleen").withTitle("Coraz większy mrok").build(),
                new Book.BookBuilder().withAuthor("Lagercrantz David").withTitle("Ta, która musi umrzeć").build(),
                new Book.BookBuilder().withAuthor("Taylor C. L.").withTitle("Teraz zaśniesz").build(),
                new Book.BookBuilder().withAuthor("Paris B.A.").withTitle("Na skraju załamania").build(),
                new Book.BookBuilder().withAuthor("Mróz Remigiusz").withTitle("Listy zza grobu").build(),
                new Book.BookBuilder().withAuthor("Mróz Remigiusz").withTitle("Rewizja. Joanna Chyłka. Tom 3").build(),
                new Book.BookBuilder().withAuthor("Severski Vincent V.").withTitle("Odwet").build(),
                new Book.BookBuilder().withAuthor("Mróz Remigiusz").withTitle("Immunitet. Joanna Chyłka. Tom 4").build(),
                new Book.BookBuilder().withAuthor("Mróz Remigiusz").withTitle("Inwigilacja. Joanna Chyłka. Tom 5").build(),
                new Book.BookBuilder().withAuthor("Tudor C. J.").withTitle("Zniknięcie Annie Thorne").build(),
                new Book.BookBuilder().withAuthor("Mróz Remigiusz").withTitle("Kontratyp. Joanna Chyłka. Tom 8").build());
    }
}

如所提到的在这里 ,所述的assertEquals方法使用equals方法,其比较实际的对象实例是否是相同的。 要解决您的问题,您应该重写equal()方法以确定值本身是否相同。

除了@omoshiroiii回答的内容外,考虑将AssertJ用作断言的依赖项。 这里有一整文档, 这里大约断言列表,你也可以使用像断言对象的字段值:

assertThat(expectedObject).isEqualToComparingFieldByField(actualObject);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM