Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中编写junit easymock中void方法的测试方法?_Java_Junit_Easymock - Fatal编程技术网

如何在java中编写junit easymock中void方法的测试方法?

如何在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

我无法编写easymock或expect for 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);

    }       
    }
公共课程委员会{
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类是第三方源代码..我编写了测试用例。但是值列表大小始终为零,我只是为了澄清