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