Java Junit测试用例列表

Java Junit测试用例列表,java,unit-testing,arraylist,junit,tdd,Java,Unit Testing,Arraylist,Junit,Tdd,试图确保我理解JUnit和TDD 第一个测试是在添加任何内容之前测试篮子是否为空 @Test public void test_GetBooksInBasket_ReturnEmptyBookList_IfNoBooksHaveBeenAdded(){ //Arrange Basket basket = new Basket(); //Act List<Object> test = basket.getBooksInBasket();

试图确保我理解JUnit和TDD

第一个测试是在添加任何内容之前测试篮子是否为空

@Test
public void test_GetBooksInBasket_ReturnEmptyBookList_IfNoBooksHaveBeenAdded(){
    //Arrange
    Basket basket = new Basket();

    //Act
     List<Object> test = basket.getBooksInBasket();


    //Assert
    assertThat(test.size(),is(1));

    System.out.println(test.size());

}
@测试
公共无效测试\u GetBooksInBasket\u ReturnEmptyBookList\u如果未添加任何书籍(){
//安排
篮子=新篮子();
//表演
列表测试=basket.getBooksInBasket();
//断言
断言(test.size(),为(1));
System.out.println(test.size());
}
班级

public class Book {

}


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Basket {

private List<Object> bookList = new ArrayList<Object>();

public List<Object> getBooksInBasket(){

    return bookList;
  }

}
公共课堂教材{
}
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公共类篮子{
private List bookList=new ArrayList();
公共列表getBooksInBasket(){
归还书目;
}
}
我只是想知道我是否做对了第一个测试用例。我在测试1时失败了,因为列表是空的

测试2。代码与上面相同,但将一本书添加到篮子中,并检查篮子中的书数是否等于1

public void test_GetBooksInBasket_ReturnsArrayOfLengthOne_After_AddBookMethodIsCalledWithOneBook(){
    //Arrange
    Basket basket = new Basket();
    Book book = new Book();

    //Act
List<Object> test = basket.addBook(book);


    //Assert
assertThat(test.size(),is(0));
}
public class Basket {

private List<Object> bookList = new ArrayList<Object>();

public List<Object> getBooksInBasket(){

    return bookList;
}

public  List<Object> addBook(Book book){
    Book book1 = new Book();
    //Book book3 = new Book();
    bookList.add(book1);
    return bookList;



}


}
public void test\u getbookinback\u在调用addbook方法后返回rayofthone\u{
//安排
篮子=新篮子();
书=新书();
//表演
列表测试=basket.addBook(book);
//断言
断言(test.size(),为(0));
}
公共类篮子{
private List bookList=new ArrayList();
公共列表getBooksInBasket(){
归还书目;
}
公共列表addBook(Book Book){
Book book1=新书();
//Book book3=新书();
图书目录。添加(第1册);
归还书目;
}
}
无论我投入多少,都不会因此而失败

测试3添加了两本书,所以我尝试了这个

public void test_GetBooksInBasket_ReturnsArrayOfLengthOne_After_AddBookMethodIsCalledWithOneBook(){
    //Arrange
    Basket basket = new Basket();
    Book book = new Book();

    //Act
List<Object> test = basket.addBook(book,book);


    //Assert
assertThat(test.size(),is(0));
}



public  List<Object> addBook(Book book, Book book1){
    Book book2 = new Book();
    Book book3 = new Book();
    bookList.addAll(Arrays.asList(book2, book3));
    return bookList;

    }
public void test\u getbookinback\u在调用addbook方法后返回rayofthone\u{
//安排
篮子=新篮子();
书=新书();
//表演
列表测试=basket.addBook(book,book);
//断言
断言(test.size(),为(0));
}
公共列表addBook(Book Book,Book book1){
Book book2=新书();
Book book3=新书();
bookList.addAll(Arrays.asList(book2,book3));
归还书目;
}

不确定我的第二个和第三个测试用例是否正常工作。

您的测试类没有自己的行为。它只是将对其方法的调用委托给其内部数据结构。此外,它还违反了最重要的OO原则(信息隐藏/封装)

因此,您的代码将验证被测试类的状态。 但是单元测试应该验证返回值和/或与依赖项通信的行为

这里的问题是,您正在测试的代码需要一些真正的行为来测试

我认为你的类
Basked
应该做的不仅仅是“持有物品”(你可以直接使用
ArrayList
来实现)。也许你的
篮子
有物品的限制。然后你可以这样验证一些行为:

class BasketWithLimitTest{

  private static final int BASKET_CONTENT_LIMIT = 2;
  @Rule
  public MockitoRule rule = MockitoJUnit.rule();

  @Rule
  public final ExpectedException exception = ExpectedException.none();

  @Mock(name="Book1");
  private book1;
  @Mock(name="Book2");
  private book2;
  @Mock(name="Book3");
  private book3;

  @Test
  public void isInitiallyEmpty(){
     Basket basket new Basket(BASKET_CONTENT_LIMIT);

     basket.add(book1);

     assertThat("not empty", basket.isEmpty(),is(true));
     assertThat("not containing the book1", basket.contains(book1),is(false));
     assertThat("not containing the book2", basket.contains(book2),is(false));
  }
  @Test
  public void firtsBookStoredSuccessfully(){
     Basket basket new Basket(BASKET_CONTENT_LIMIT);

     basket.add(book1);

     assertThat("not empty", basket.isEmpty(),is(false));
     assertThat("contains the book", basket.contains(book1),is(true));
  }
  @Test
  public void throwExceptionWhenLimitExceeded(){
     Basket basket new Basket(BASKET_CONTENT_LIMIT);

     basket.add(book1);
     basket.add(book2);

     exception.expect(RuntimeException.class);
     exception.expectMessage("could not add Book3 because limit of 2 books exceeded");
     basket.add(book3);

  }
}

您应该根据实际值断言预期值。如果预期列表为空,则执行如下断言:
assertEquals(0/*expected*/,List.size()/*actual*/)
@trylimits好的,谢谢,我切换了我的第一个测试用例,它工作了。你知道我应该为另外两个做什么吗?做同样的事情:根据期望值进行断言。添加一本书后,你会期望篮子正好包含一本书。所以像这样断言:
assertEquals(1/*expected*/,list.size())
@trylimits的问题是,我会试试看,如果我把0设为1或2,结果仍然会是真的