2013-03-17 31 views
5

Tôi muốn sử dụng số assertArrayEquals(ArrayList<Token>, ArrayList<Token>) với các đối số này (ví dụ: arrayList of tokens). Nhưng Java nói với tôi rằng tôi cần phải tạo ra một phương pháp như vậy. Có cách nào để kiểm tra sự bình đẳng của hai arrayLists thuộc loại nào trong Junit?ArrayList equality JUnit testing

+1

'assertEquals' bình thường sẽ hoạt động tốt cho' ArrayList '. –

+2

@Bohemian: Tôi không tin điều đó. 'Danh sách.bằng 'kiểm tra phần tử bằng phần tử, và' assertEquals' sử dụng phương thức 'equals'. –

+0

@LouisWasserman woops! bạn đúng :) – Bohemian

Trả lời

14

Tôi muốn sử dụng assertArrayEquals(ArrayList<Token>, ArrayList<Token>) với các đối số này (ví dụ: danh sách mã thông báo). Nhưng Java nói với tôi rằng tôi cần phải tạo ra một phương pháp như vậy.

Nó cho bạn biết rằng bạn cần tạo phương thức vì không có phương thức nào trong thư viện JUnit. Không có phương thức như vậy trong thư viện JUnit vì assertArrayEquals là để so sánh mảng và và ArrayListkhông một mảng — đó là List.

Có cách nào để kiểm tra tính bình đẳng của hai arrayLists thuộc loại nào trong Junit không?

Bạn có thể kiểm tra sự bình đẳng giữa hai ArrayLists (thực sự, bất kỳ hai đối tượng List) sử dụng equals, vì vậy bạn sẽ có thể sử dụng phương pháp assertEquals JUnit và nó sẽ chỉ làm việc tốt.

+0

Kiểm tra 'asserEquals' dựa trên ghi đè' bằng () 'phương pháp? – Ram

+0

@Ram - Có, nó sẽ sử dụng việc thực hiện ngang bằng bằng Danh sách. – DaoWen

0

Nếu bạn đang sử dụng một số khung kệ junit như unitils vv, chúng có các phương thức như assertReflectionEquals (similary framework khác), nơi bạn có thể sử dụng bất kỳ đối tượng nào. Nếu bạn không sử dụng bất kỳ khung công cụ junit nào của bên thứ ba, bạn có thể viết phương pháp chung tương tự của riêng mình

+7

Guys Downvote thật tuyệt vời nhưng thực sự khó chịu khi ai đó downvote mà không đưa ra bất kỳ phản hồi nào của nó. Nó không tạo cơ hội cho poster để cải thiện vào lần sau –

2

thử

Assert.assertEquals(Object expected, Object actual); 

nó hoạt động tốt với bộ sưu tập

4

void org.junit.Assert.assertArrayEquals(Object[] expecteds, Object[] actuals) Những gì bạn có thể muốn sử dụng là. Bạn chỉ cần chuyển đổi Danh sách thành mảng bằng phương thức toArray(), như sau:

ArrayList<Token> list1 = buildListOne(); // retrieve or build list 
ArrayList<Token> list2 = buildListTwo(); // retrieve or build other list with same items 

assertArrayEquals(list1.toArray(), list2.toArray()); 

Đừng quên nhập khẳng định này.

import static org.junit.Assert.assertArrayEquals; 

Nhưng phương pháp này chỉ hoạt động nếu các mục trong cả hai danh sách có cùng thứ tự. Nếu lệnh không được đảm bảo, thì bạn cần phải sắp xếp các danh sách với phương thức Collections.sort(), nhưng đối tượng của bạn cần triển khai giao diện java.util.Comparable với một phương thức int compareTo(T o).

PS: Các giải pháp khác có thể là sử dụng assertEquals và quấn danh sách của bạn vào Set, như thế:

assertEquals(new HashSet<Token>(list1), new HashSet<Token>(list2)); 
3

Imagine myArraylist được một danh sách mảng với nội dung "one", "two", "three"

này hoạt động tốt:

List<String> categories = asList("one", "two", "three"); 
assertTrue(myArraylist.equals(categories)); 

Đừng quên nhập: import static java.util.Arrays.asList;