Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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轻松模拟中的InvocationTargetException_Java_Unit Testing_Junit_Easymock - Fatal编程技术网

Java JUnit轻松模拟中的InvocationTargetException

Java JUnit轻松模拟中的InvocationTargetException,java,unit-testing,junit,easymock,Java,Unit Testing,Junit,Easymock,使用EasyMock运行JUnit时,我遇到了一个问题。请在下面找到源文件-UserTest.java(JUnit文件)和UserFinder.java(要进行单元测试的应用程序文件) UserTest.java Class UserTest { ... @Test public void testFindUserFunction() throws Exception { DAO daoMock = EasyMock.createMock(DAO.class);

使用
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);
  }
}
Class UserFinder {
...
...
public User findUser(String userFirstName, DAO dao)
{
return dao.findUser(userFirstName);
}
...
...
}
UserFinder.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);
  }
}
Class UserFinder {
...
...
public User findUser(String userFirstName, DAO dao)
{
return dao.findUser(userFirstName);
}
...
...
}
在JUnit中,我创建了一个mock对象
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。谢谢。

你必须模仿这个方法

EasyMock.expect(dao.findUser(userFirstName).andReturn(user);
而不是

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

谢谢。。斯特凡