Java 如何使用junit测试向arraylist添加元素
Java 如何使用junit测试向arraylist添加元素,java,unit-testing,arraylist,junit,mocking,Java,Unit Testing,Arraylist,Junit,Mocking,我想测试addElement方法: public class MyClass { private List<Integer> ints = new ArrayList<>(); public void addElement(int element) { ints.add(element); } } 公共类MyClass{ private List ints=new ArrayList(); 公共无效加法器(整数元素){ 添加(元
我想测试addElement方法:
public class MyClass {
private List<Integer> ints = new ArrayList<>();
public void addElement(int element) {
ints.add(element);
}
}
公共类MyClass{
private List ints=new ArrayList();
公共无效加法器(整数元素){
添加(元素);
}
}
我需要测试是否添加了我的元素。根据类隔离,我不能使用任何ArrayList方法来检查它。事实上,我应该嘲笑我的arrayList。但如果我模拟它并改变get()方法的行为以返回一些值,我就不能确定我的元素是否在那个列表中如何测试它?我建议创建一个
MyClass
的子类,它具有某种类型的public
方法来检索ArrayList
(或列表中的特定元素)。如果要从子类访问ints
对象,还需要将其访问级别更改为protected
。如果您想让它更紧凑一些,可以使用默认范围,并要求新类与MyClass
位于同一个包中。我以前已经这样做了,并且认为能够对您的代码进行单元测试是一个合理的花费。
这样将测试父类,但您可以使用子类从测试中检索信息
例如:
public class MyClass {
protected List<Integer> ints = new ArrayList<>();
...
}
public class MyClassChild extends MyClass {
public List<Integer> getInts() {
return ints;
}
}
// Test code
MyClassChild myClass = new MyClassChild();
myClass.addElement(42);
myclass.getInts().size() == 1;
公共类MyClass{
受保护列表int=new ArrayList();
...
}
公共类MyClassChild扩展MyClass{
公共列表getInts(){
返回整数;
}
}
//测试代码
MyClassChild myClass=新建MyClassChild();
myClass.addElement(42);
myclass.getInts().size()==1;
如果所有这些都失败了,您可以依靠反射来检索对象,但这更麻烦(在我看来)。我建议创建
MyClass
的子类,该子类具有某种类型的public
方法来检索ArrayList
(或列表中的特定元素)。如果要从子类访问ints
对象,还需要将其访问级别更改为protected
。如果您想让它更紧凑一些,可以使用默认范围,并要求新类与MyClass
位于同一个包中。我以前已经这样做了,并且认为能够对您的代码进行单元测试是一个合理的花费。
这样将测试父类,但您可以使用子类从测试中检索信息
例如:
public class MyClass {
protected List<Integer> ints = new ArrayList<>();
...
}
public class MyClassChild extends MyClass {
public List<Integer> getInts() {
return ints;
}
}
// Test code
MyClassChild myClass = new MyClassChild();
myClass.addElement(42);
myclass.getInts().size() == 1;
公共类MyClass{
受保护列表int=new ArrayList();
...
}
公共类MyClassChild扩展MyClass{
公共列表getInts(){
返回整数;
}
}
//测试代码
MyClassChild myClass=新建MyClassChild();
myClass.addElement(42);
myclass.getInts().size()==1;
如果所有这些都失败了,您可以依靠反射来检索对象,但这更麻烦(在我看来)。我建议创建
MyClass
的子类,该子类具有某种类型的public
方法来检索ArrayList
(或列表中的特定元素)。如果要从子类访问ints
对象,还需要将其访问级别更改为protected
。如果您想让它更紧凑一些,可以使用默认范围,并要求新类与MyClass
位于同一个包中。我以前已经这样做了,并且认为能够对您的代码进行单元测试是一个合理的花费。
这样将测试父类,但您可以使用子类从测试中检索信息
例如:
public class MyClass {
protected List<Integer> ints = new ArrayList<>();
...
}
public class MyClassChild extends MyClass {
public List<Integer> getInts() {
return ints;
}
}
// Test code
MyClassChild myClass = new MyClassChild();
myClass.addElement(42);
myclass.getInts().size() == 1;
公共类MyClass{
受保护列表int=new ArrayList();
...
}
公共类MyClassChild扩展MyClass{
公共列表getInts(){
返回整数;
}
}
//测试代码
MyClassChild myClass=新建MyClassChild();
myClass.addElement(42);
myclass.getInts().size()==1;
如果所有这些都失败了,您可以依靠反射来检索对象,但这更麻烦(在我看来)。我建议创建
MyClass
的子类,该子类具有某种类型的public
方法来检索ArrayList
(或列表中的特定元素)。如果要从子类访问ints
对象,还需要将其访问级别更改为protected
。如果您想让它更紧凑一些,可以使用默认范围,并要求新类与MyClass
位于同一个包中。我以前已经这样做了,并且认为能够对您的代码进行单元测试是一个合理的花费。
这样将测试父类,但您可以使用子类从测试中检索信息
例如:
public class MyClass {
protected List<Integer> ints = new ArrayList<>();
...
}
public class MyClassChild extends MyClass {
public List<Integer> getInts() {
return ints;
}
}
// Test code
MyClassChild myClass = new MyClassChild();
myClass.addElement(42);
myclass.getInts().size() == 1;
公共类MyClass{
受保护列表int=new ArrayList();
...
}
公共类MyClassChild扩展MyClass{
公共列表getInts(){
返回整数;
}
}
//测试代码
MyClassChild myClass=新建MyClassChild();
myClass.addElement(42);
myclass.getInts().size()==1;
如果所有其他方法都失败,您可以依靠反射来检索对象,但这更麻烦(在我看来)。assertEquals(intsPreviousSize+1,ints.size())
,并为ints ArrayList提供一个getter方法。如果你不能使用getter,那么你可以使用反射,如果你不能这样做,那么我认为你不能。assertEquals(intsPreviousSize+1,ints.size())
,并为ints ArrayList使用getter方法。如果你不能使用getter,那么你可以使用反射,如果你不能这样做,那么我认为你不能。assertEquals(intsPreviousSize+1,ints.size())
,并为ints ArrayList使用getter方法。如果你不能使用getter,那么你可以使用反射,如果你不能这样做,那么我认为你不能。assertEquals(intsPreviousSize+1,ints.size())
,并为ints Ar使用getter方法