JavaJUnit:如何断言列表中的所有对象都来自某个类?
我构建了以下类:JavaJUnit:如何断言列表中的所有对象都来自某个类?,java,junit,tdd,Java,Junit,Tdd,我构建了以下类: public class BibliotecaApp { public static void main(String[] args) { System.out.print("Welcome!"); } public static ArrayList<Book> getBooksList(){ return new ArrayList(); } } 考试通过了,不应该。注意,在实际的方法中,我返回
public class BibliotecaApp {
public static void main(String[] args) {
System.out.print("Welcome!");
}
public static ArrayList<Book> getBooksList(){
return new ArrayList();
}
}
考试通过了,不应该。注意,在实际的方法中,我返回了ArrayList
(我正在练习TDD)的一个实例,尽管我将方法签名定义为ArrayList
,但这就是测试通过的原因吗?
如果是这样,我应该如何编写一个测试来确保列表中的每一项都属于某个类(Book
)
提前感谢。每个项目的行为是: 仅当[…]项[…]全部匹配时匹配 因此,空列表将始终匹配 如果这是一个奇怪的diea,那么另一种思考方式是,
everyItem
只有在找到与内部匹配器不匹配的项时才会失败。1空列表中没有此类项
如果您希望在没有任何项的情况下测试失败,那么您还需要明确声明:
assertThat(BibliotecaApp.getBooksList(), not(empty()));
一,。即使你不同意这种等价性,你也可以看一看,这确实是正在发生的事情
二,。但您也可以删除原始断言,因为编译器已经强制执行了该类型。该列表中没有一项不是
书籍@OliverCharlesworth该列表不是空的吗?是的,但这不是您的断言测试的目的。@OliverCharlesworth肯定,但是,当列表不完全由书籍实例组成时,我希望测试失败。我应该返回什么样的数据才能实现它?在TDD中,我们验证行为。您的测试验证了一个实现细节(不应该测试),并且加倍了编译器正在执行的类型检查。因此,这个测试(按现状)充其量也没用。谢谢。但这不是我想要断言的。我想断言arraylist中的每个元素是否都是Book对象,我只想知道当BibliotecaApp类中的方法没有返回包含books的数组时,为什么测试会通过。它只返回一个空的ArrayList。@Leandro-我的回答已经解释过了-没有与isA()
matcher不匹配的项。是的,我知道了。我只是还不明白为什么,对不起,你能用更详细的解释更新答案吗?
assertThat(BibliotecaApp.getBooksList(), not(empty()));