【问题标题】:InvocationTargetException in Easy mock of JUnitJUnit 的 Easy mock 中的 InvocationTargetException
【发布时间】:2015-05-21 10:31:00
【问题描述】:

我在使用EasyMock 运行JUnit 时遇到问题。请在下面找到源文件 - UserTest.java(JUnit 文件)和 UserFinder.java(要进行单元测试的应用程序文件)。

UserTest.java

Class UserTest
{
  ...
  @Test
  public void testFindUserFunction() throws Exception {


    DAO daoMock = EasyMock.createMock(DAO.class);       
    User user = new User("john", "stephen", "city street", "bangalore");
    EasyMock.expect(daoMock.userExists(user).andReturn(true);
    EasyMock.replay(daoMock);       
    String userFirstName = user.getFirstName();
    User resultUser = UserFinder.findUser(userFirstName, daoMock);      
    PowerMock.verify(daoMock);      
    Assert.assertEquals(user, resultUser);
  }
}

UserFinder.java

Class UserFinder {
...
...
public User findUser(String userFirstName, DAO dao)
{
return dao.findUser(userFirstName);
}
...
...
}

在 JUnit 中,我创建了一个模拟对象 daoMock 并在 expect 行为下方添加。

EasyMock.expect(daoMock.userExists(user).andReturn(true);

UserFinder.java 的以下行中,我需要传递 daoMock,因为该类已经存在并以这种方式设计。当通过 JUnit 执行以下行时,我得到java.lang.reflect.InvocationTargetException

User resultUser = UserFinder.findUser(userFirstName, daoMock);

我是EasyMock 的新手,我认为设置expect 会增加daoMock 对象的行为,但事实并非如此。请帮助我了解如何调用dao.findUser 行,因为我无法模拟此行,因为它在应用程序文件中。我如何在EasyMock 中模拟和运行这种情况下的 JUnit。谢谢。

【问题讨论】:

    标签: java unit-testing junit easymock


    【解决方案1】:

    你必须模拟方法

    EasyMock.expect(dao.findUser(userFirstName).andReturn(user);
    

    而不是

    EasyMock.expect(daoMock.userExists(user)).andReturn(true);
    

    【讨论】:

    • 非常感谢.. Stefan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多