Java Junit测试用例列表
试图确保我理解JUnit和TDD 第一个测试是在添加任何内容之前测试篮子是否为空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();
@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,结果仍然会是真的