如何在java中编写junit easymock中void方法的测试方法?
我无法编写easymock或expect for void方法。我想为Board编写测试类。请任何人在这方面提供帮助。我的类如下所示如何在java中编写junit easymock中void方法的测试方法?,java,junit,easymock,Java,Junit,Easymock,我无法编写easymock或expect for void方法。我想为Board编写测试类。请任何人在这方面提供帮助。我的类如下所示 public class Board{ Snmp snmp; Board(Snmp snmp){ this.snmp = new Snmp(); } private void readTable() throws SnmpException { ArrayList<String> boa
public class Board{
Snmp snmp;
Board(Snmp snmp){
this.snmp = new Snmp();
}
private void readTable() throws SnmpException {
ArrayList<String> boardOIDs = new ArrayList<String>();
List<List<String>> valuesList = new ArrayList<List<String>>();
List<List<String>> oidsList = new ArrayList<List<String>>();
boardOIDs.add(OID_BOARD_INDEX);
boardOIDs.add(OID_BOARDNAME);
boardOIDs.add(OID_BOARDTYPE);
//this method read and put value into valueList
snmp.snmpGetTable(boardOIDs, oidsList,valuesList);
s.o.p( "Value List size" +valuesList.size);
}
}
公共课程委员会{
Snmp;
电路板(Snmp){
this.snmp=新的snmp();
}
私有void readTable()引发SnmpException{
ArrayList boardOIDs=新的ArrayList();
列表值列表=新的ArrayList();
List oidsList=新的ArrayList();
添加(OID_BOARD_索引);
添加(OID_BOARDNAME);
添加(OID_BOARDTYPE);
//此方法读取值并将其放入valueList
snmp.snmpGetTable(boardOIDs、oidsList、valuesList);
s、 o.p(“价值列表大小”+价值列表大小);
}
}
您可以训练模拟使用答案:
@Test
public void testReadTable() {
Snmp snmp = createMock(Snmp.class);
snmp.snmpGetTable(anyObject(List.class), anyObject(List.class), anyObject(List.class));
IAnswer answer = new IAnswer() {
@Override
public Object answer() throws Throwable {
List list = (List) getCurrentArguments()[2];
list.add("a");
return null;
}
};
expectLastCall().andAnswer(answer);
replay(snmp);
Board board = new Board(snmp);
board.readTable();
verify(snmp);
}
请注意,您需要修复Board类的构造函数,并使该方法至少默认可见或以任何其他方式调用它
...
Board(Snmp snmp){
this.snmp = snmp;
}
void readTable(){
...
另请参见此答案:您可以训练模拟使用答案:
@Test
public void testReadTable() {
Snmp snmp = createMock(Snmp.class);
snmp.snmpGetTable(anyObject(List.class), anyObject(List.class), anyObject(List.class));
IAnswer answer = new IAnswer() {
@Override
public Object answer() throws Throwable {
List list = (List) getCurrentArguments()[2];
list.add("a");
return null;
}
};
expectLastCall().andAnswer(answer);
replay(snmp);
Board board = new Board(snmp);
board.readTable();
verify(snmp);
}
请注意,您需要修复Board类的构造函数,并使该方法至少默认可见或以任何其他方式调用它
...
Board(Snmp snmp){
this.snmp = snmp;
}
void readTable(){
...
另请参见此答案:您可以训练模拟使用答案:
@Test
public void testReadTable() {
Snmp snmp = createMock(Snmp.class);
snmp.snmpGetTable(anyObject(List.class), anyObject(List.class), anyObject(List.class));
IAnswer answer = new IAnswer() {
@Override
public Object answer() throws Throwable {
List list = (List) getCurrentArguments()[2];
list.add("a");
return null;
}
};
expectLastCall().andAnswer(answer);
replay(snmp);
Board board = new Board(snmp);
board.readTable();
verify(snmp);
}
请注意,您需要修复Board类的构造函数,并使该方法至少默认可见或以任何其他方式调用它
...
Board(Snmp snmp){
this.snmp = snmp;
}
void readTable(){
...
另请参见此答案:您可以训练模拟使用答案:
@Test
public void testReadTable() {
Snmp snmp = createMock(Snmp.class);
snmp.snmpGetTable(anyObject(List.class), anyObject(List.class), anyObject(List.class));
IAnswer answer = new IAnswer() {
@Override
public Object answer() throws Throwable {
List list = (List) getCurrentArguments()[2];
list.add("a");
return null;
}
};
expectLastCall().andAnswer(answer);
replay(snmp);
Board board = new Board(snmp);
board.readTable();
verify(snmp);
}
请注意,您需要修复Board类的构造函数,并使该方法至少默认可见或以任何其他方式调用它
...
Board(Snmp snmp){
this.snmp = snmp;
}
void readTable(){
...
另请参见此答案:如果要检查输出结果,可以
但是,您的方法的设计不允许轻松捕获输出,因为您不传入输出流。但是,您可以模拟System.out.println,并确保它得到正确的参数。如果要检查输出结果,您可以
但是,您的方法的设计不允许轻松捕获输出,因为您不传入输出流。但是,您可以模拟System.out.println,并确保它得到正确的参数。如果要检查输出结果,您可以
但是,您的方法的设计不允许轻松捕获输出,因为您不传入输出流。但是,您可以模拟System.out.println,并确保它得到正确的参数。如果要检查输出结果,您可以
但是,您的方法的设计不允许轻松捕获输出,因为您不传入输出流。但是,您可以模拟System.out.println,并确保其参数正确。您的构造函数不使用传入的
snmp
实例,而是创建一个新实例。你为什么这么做
Board(Snmp snmp){
this.snmp = new Snmp();
}
应该是
Board(Snmp snmp){
this.snmp = snmp;
}
然后,您可以使用easymock创建一个模拟的Snmp
实例,并将其传递给Board
的构造函数
Snmp mock = createMock(Snmp.class);
Board board = new Board(mock);
要在easymock中使用on void方法,不需要使用expect
方法。当mock处于重播状态时,只需调用mock上的方法
因此,要期望调用snmpGetTable()
,您只需说
ArrayList<String> boardOIDs = ...
List<List<String>> valuesList =...
List<List<String>> oidsList = ...
Snmp mock = createMock(Snmp.class);
//this is the expectation
mock.snmpGetTable(boardOIDs, oidsList,valuesList);
//now replay the mock
replay(mock);
Board board = new Board(mock);
有关更多详细信息,请参见。您的构造函数不使用传入的
snmp
实例,而是创建一个新实例。你为什么这么做
Board(Snmp snmp){
this.snmp = new Snmp();
}
应该是
Board(Snmp snmp){
this.snmp = snmp;
}
然后,您可以使用easymock创建一个模拟的Snmp
实例,并将其传递给Board
的构造函数
Snmp mock = createMock(Snmp.class);
Board board = new Board(mock);
要在easymock中使用on void方法,不需要使用expect
方法。当mock处于重播状态时,只需调用mock上的方法
因此,要期望调用snmpGetTable()
,您只需说
ArrayList<String> boardOIDs = ...
List<List<String>> valuesList =...
List<List<String>> oidsList = ...
Snmp mock = createMock(Snmp.class);
//this is the expectation
mock.snmpGetTable(boardOIDs, oidsList,valuesList);
//now replay the mock
replay(mock);
Board board = new Board(mock);
有关更多详细信息,请参见。您的构造函数不使用传入的
snmp
实例,而是创建一个新实例。你为什么这么做
Board(Snmp snmp){
this.snmp = new Snmp();
}
应该是
Board(Snmp snmp){
this.snmp = snmp;
}
然后,您可以使用easymock创建一个模拟的Snmp
实例,并将其传递给Board
的构造函数
Snmp mock = createMock(Snmp.class);
Board board = new Board(mock);
要在easymock中使用on void方法,不需要使用expect
方法。当mock处于重播状态时,只需调用mock上的方法
因此,要期望调用snmpGetTable()
,您只需说
ArrayList<String> boardOIDs = ...
List<List<String>> valuesList =...
List<List<String>> oidsList = ...
Snmp mock = createMock(Snmp.class);
//this is the expectation
mock.snmpGetTable(boardOIDs, oidsList,valuesList);
//now replay the mock
replay(mock);
Board board = new Board(mock);
有关更多详细信息,请参见。您的构造函数不使用传入的
snmp
实例,而是创建一个新实例。你为什么这么做
Board(Snmp snmp){
this.snmp = new Snmp();
}
应该是
Board(Snmp snmp){
this.snmp = snmp;
}
然后,您可以使用easymock创建一个模拟的Snmp
实例,并将其传递给Board
的构造函数
Snmp mock = createMock(Snmp.class);
Board board = new Board(mock);
要在easymock中使用on void方法,不需要使用expect
方法。当mock处于重播状态时,只需调用mock上的方法
因此,要期望调用snmpGetTable()
,您只需说
ArrayList<String> boardOIDs = ...
List<List<String>> valuesList =...
List<List<String>> oidsList = ...
Snmp mock = createMock(Snmp.class);
//this is the expectation
mock.snmpGetTable(boardOIDs, oidsList,valuesList);
//now replay the mock
replay(mock);
Board board = new Board(mock);
有关更多详细信息,请参见我想模拟snmp..并且我想编写testValueListSize()。。但是snmp类是第三方源代码。我编写了测试用例。但是值列表大小始终为零。我正在获取只是为了澄清:是否要模拟方法“snmpGetTable”并期望变量“valuesList”不为空?不。这是第三方源代码方法,它已被模拟为Creatmock(snmp.class);但是在添加之后,我在“snmpGetTable”中得到的值也是空的。使用“expect”,我的意思是在调用mock之后填充valuesList。最后一行打印出“值列表大小1”或“值列表大小2”。这就是你想要的吗?是的。实际上大小是1。但我总是得到0,即使我模拟了Snmp类:-(我想模拟snmp..我想编写testValueListSize()..但snmp类是第三方源代码..我编写了测试用例。但是值列表大小始终为零,我只是为了澄清