Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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持久化模拟对象_Java_Unit Testing_Easymock - Fatal编程技术网

Java 使用junit和easymock持久化模拟对象

Java 使用junit和easymock持久化模拟对象,java,unit-testing,easymock,Java,Unit Testing,Easymock,因此,我使用easymock在单元测试时模拟我的数据层对象。 我使用JPA来实现持久性。例如,项目=EasyMock.cre..(项目类);等等 现在,我想测试的方法得到了这个项目,它做了一些事情,然后调用persist(project)将它持久化。项目是一个模拟对象,所以它在这里抛出错误。我的经理告诉我,因为您只想测试该方法的功能。db的返回值不是imp,这就是为什么应该使用mocking而不是real db。所以,对于这个有persist方法调用的方法,我应该怎么做 谢谢。你应该嘲笑实体经理

因此,我使用easymock在单元测试时模拟我的数据层对象。 我使用JPA来实现持久性。例如,项目=EasyMock.cre..(项目类);等等

现在,我想测试的方法得到了这个项目,它做了一些事情,然后调用persist(project)将它持久化。项目是一个模拟对象,所以它在这里抛出错误。我的经理告诉我,因为您只想测试该方法的功能。db的返回值不是imp,这就是为什么应该使用mocking而不是real db。所以,对于这个有persist方法调用的方法,我应该怎么做


谢谢。

你应该嘲笑实体经理,而不是实体

实体只是一个可以轻松创建的pojo,您需要查看是否在实体管理器上调用了persist

编辑

看起来您正在通过静态方法在类下的测试中创建实体管理器的实例。没有简单的方法来嘲弄它

您应该使用将实体管理器传递给使用它的对象。然后,您可以只传递模拟实例,而不是传递真正的实现

因此,您的代码看起来像:

Project project = ...    

EntityManager manager = EasyMock.createStrictMock(EntityManager.class); 
ClassUnderTest test = new ClassUnderTest(manager)

//You expect this to be called    
manager.persist(project);

EasyMock.replay(manager);

//The method you are testing
test.save(project);

EasyMock.verify(manager);

(我已经有一段时间没有使用easymock了,所以方法可能不太正确。)

你应该模仿实体管理器,而不是实体

实体只是一个可以轻松创建的pojo,您需要查看是否在实体管理器上调用了persist

编辑

看起来您正在通过静态方法在类下的测试中创建实体管理器的实例。没有简单的方法来嘲弄它

您应该使用将实体管理器传递给使用它的对象。然后,您可以只传递模拟实例,而不是传递真正的实现

因此,您的代码看起来像:

Project project = ...    

EntityManager manager = EasyMock.createStrictMock(EntityManager.class); 
ClassUnderTest test = new ClassUnderTest(manager)

//You expect this to be called    
manager.persist(project);

EasyMock.replay(manager);

//The method you are testing
test.save(project);

EasyMock.verify(manager);

(我已经有一段时间没有使用easymock了,所以方法可能不太正确。)

取决于您要测试的内容。我不想测试它是否已被持久化。我只想测试这些方法是否被正确调用。取决于您想要测试什么。我不想测试它是否已经被持久化。我只是想测试一下这些方法是否正确调用。谢谢,我想这就是我所需要的。因此,对于我的实体管理器,我目前有如下内容:EntityManager EntityManager=Persistence.createEntityManager工厂(“AutomationCreatePU”).createEntityManager();你能再解释一下我是如何模仿实体经理的吗。或者有相关链接?谢谢。@Sara-使用与创建模拟项目相同的方法,并将其传递到被测试的类中。谢谢。我试试看,然后再打给你。:)谢谢,我想这就是我需要的。因此,对于我的实体管理器,我目前有如下内容:EntityManager EntityManager=Persistence.createEntityManager工厂(“AutomationCreatePU”).createEntityManager();你能再解释一下我是如何模仿实体经理的吗。或者有相关链接?谢谢。@Sara-使用与创建模拟项目相同的方法,并将其传递到被测试的类中。谢谢。我试试看,然后再打给你。:)