【问题标题】:How to write junit with easymock in java?如何在java中用easymock编写junit?
【发布时间】:2013-12-16 14:57:44
【问题描述】:

如何使用 EasyMock 为 getBoards 方法编写 JUnit(以下示例中提到)。我尝试使用带有 EasyMock 的 JUnit 来覆盖代码。我已经在另一个链接“https://stackoverflow.com/questions/20604031/how-to-write-test-method-for-void-method-in-junit-easymock-in-javalittle-diff-i”中简要解释了

public class DCI implements ...{
private Device device = null;
    private SnmpUtils snmp = null;
DCM(Device device){
 this.device = device;
}

@override
void openCommun(){
snmp = new SnmpUtils(device);
snmp.openSnmpComm();

}
// ---> How to write Junit test with easymock for this method?
public List<Board> getBoards(DeviceIdn deviceIdn) throws SnmpException {

        List<Board> boardList = new ArrayList<Board>();
        try {
        //BoardTableClass --> Below given
            BoardTable boardTable = new BoardTable(snmp);
            boardTable.readTable();

            for (int row = 0; row < boardTable.size(); row++) {

                String strBoardIndex = boardTable.getValue(row, BoardTable.BoardColumn.BoardIndex);
                String strBoardName = boardTable.getValue(row, BoardTable.BoardColumn.BoardName);
                String strBoardType = boardTable.getValue(row, BoardTable.BoardColumn.BoardType);
                int boardIndex = new Integer(strBoardIndex);
                BoardIdn boardIdn = new BoardIdn(deviceIdn, boardIndex);
                Board board = new Board(boardIdn);
                board.setName(strBoardName);
                board.setType(strBoardType);
                boardList.add(board);
            }
            logger.info(boardList.size());
        }
        //In handleException method , snmpException checked 
        catch (Exception e) {
            handleException(e);
        }

        return boardList;
    }
}

【问题讨论】:

  • 这种布局不利于模拟。您正在将实例变量传递给您正在具体构建的对象。除非您想模拟实例变量,否则与模拟几乎没有关系。

标签: java junit easymock


【解决方案1】:

对于 void 方法模拟使用 EasyMock.expectLastCall()

例如你想模拟

  amimalService.saveOldAnimals(List<Animal> animals){} //present in AnimalService class

所以你的测试用例变成了

 animalService.saveOldAnimals(animals);
 EasyMock.expectLastCall();

你的 void 方法被模拟了。

在您的情况下,只需创建 DeviceIdn 对象并传递给 getBoard 方法。

    getBoard(myDevice);

了解我们需要模拟什么和不需要模拟什么。我不了解您的域类,因此无法为您提供帮助。但会帮助您了解需要模拟的内容。

例如,我有一个调用存储库说animalRepository.findByAge(int age),它返回List&lt;Animal&gt;

现在假设在你的 getBoard() 方法中,如果你有这个方法调用,那么你可以模拟那个方法,因为对于测试用例,从数据库中获取值是不好的。因此,请准备好您自己的值,并在调用存储库调用时将其返回给方法。 所以 mocking for 方法是这样的。

  EasyMock.expect(animalRepository.findByAge(12)).andReturn(amimalsList);

这个animalsList是你自己在你的测试方法中准备的,以便让测试用例正常工作。

【讨论】:

  • No..getBoards 方法不是 void 方法。它返回 List..我试过了,但在第二步,它出来了。它根本不进去
  • No..getBoards 方法不是 void 方法。它返回 List..我试过了,但在第二步,它出来了。它根本不进去 ..BoardTable boardTable = new BoardTable(snmp ); boardTable.readTable();在这之后它出来了
  • 这就是为什么我问你什么是 BoardTable 以及你遇到了什么错误。由于我不知道您的域类,我无法提供帮助
  • stackoverflow.com/questions/20604031/… ...你能把我在代码中解释过的这个链接给我。实际上是从第三方源代码获得的BoardTable值。如果你去那个链接,你可以c。
猜你喜欢
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
相关资源
最近更新 更多