我无法编写easymock或期望使用void方法。我想为Board编写测试类。请允许任何人帮助我...这样的课程如下所示
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);
}
}
答案 0 :(得分:2)
您的构造函数不使用传入的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中的void方法,您不需要使用expect
方法。当模拟处于重放状态时,只需在模拟上调用方法。
所以期待拨打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);
如果您需要从void方法中抛出异常,可以使用easymock's
expectLastCall()
//this is the expectation
mock.snmpGetTable(boardOIDs, oidsList,valuesList);
expectLastCall().andThrow( new Exception(... ));
有关详细信息,请参阅Easymock documentation
答案 1 :(得分:1)
您可以训练模拟使用答案:
@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(){
...
答案 2 :(得分:0)
如果要检查输出结果,可以。
但是,您的方法不是为了便于捕获输出而设计的,因为您没有传入输出流。但是,您可以模拟System.out.println
,并确保它获得正确的参数。