Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 Hibernate的模拟对象';s类_Java_Testing_Mocking_Easymock - Fatal编程技术网

Java Hibernate的模拟对象';s类

Java Hibernate的模拟对象';s类,java,testing,mocking,easymock,Java,Testing,Mocking,Easymock,是否可以为Hibrate的本机类创建模拟对象(我使用easymock)?例如查询?如果是,我应该怎么做 以下是测试代码的一部分: @Mock private SessionFactory sessionFactory; @Mock protected Session session; @Mock protected Query query; @Before public void setUp() { *** pageService.setQuery(query); p

是否可以为Hibrate的本机类创建模拟对象(我使用easymock)?例如查询?如果是,我应该怎么做

以下是测试代码的一部分:

@Mock
 private SessionFactory sessionFactory;

 @Mock
 protected Session session;

 @Mock
 protected Query query;

 @Before
 public void setUp() {
***
  pageService.setQuery(query);
  pageService.setSession(session);
 }

String hqlUniquenessCheck - it is a select request
  expect(sessionFactory.getCurrentSession().createQuery(hqlUniquenessCheck)).andReturn(query);
但在网上我得到了java.lang.NullPointerException。 有什么不对劲


非常感谢。

Hibernate类不是本机类。您可以模拟hibernate类,就像应用程序中的任何其他类一样

本机类是具有
Native
java关键字的类。这意味着它们包含的字节码不是java代码。hibernate的所有代码都是java代码,可从hibernate.org获得。(如果您使用的是maven,则可以使用
-DdownloadSources=true
,或在IDE中设置等效设置。这将显示库的源代码。)请注意,模拟对象不需要源代码

Query
是一个接口,因此您可以使用该框架模拟它,就像模拟任何其他接口一样。查看框架的文档:

编辑:


值得注意的是,hibernate确实在运行时为持久对象生成代理。您将在这些代理的类名中看到类似于
$$enhancerbyglib
的内容。这些代理确实有本机代码,您不应该试图模拟它们。与其试图从会话中模拟真实的持久对象,不如模拟
会话,它本身就是一个接口,模拟
查询,并根据查询结果创建自己的模拟对象。

Hibernate类不是本机类。您可以模拟hibernate类,就像应用程序中的任何其他类一样

本机类是具有
Native
java关键字的类。这意味着它们包含的字节码不是java代码。hibernate的所有代码都是java代码,可从hibernate.org获得。(如果您使用的是maven,则可以使用
-DdownloadSources=true
,或在IDE中设置等效设置。这将显示库的源代码。)请注意,模拟对象不需要源代码

Query
是一个接口,因此您可以使用该框架模拟它,就像模拟任何其他接口一样。查看框架的文档:

编辑:


值得注意的是,hibernate确实在运行时为持久对象生成代理。您将在这些代理的类名中看到类似于
$$enhancerbyglib
的内容。这些代理确实有本机代码,您不应该试图模拟它们。不要试图从会话中模拟真正的持久对象,而是模拟本身是接口的
会话
,模拟
查询
,并根据查询结果创建自己的模拟对象。

您以前试过模拟接口吗?没什么不同。三思而后行!IMHO模拟JPA完全是浪费时间。在我问你之前,我一直在尝试这样做,但我失败了,我听说模拟本地组件可能会有一些问题,可能会有一些特殊性。别急着说我没试过。我不知道本机组件是什么。你是说具体的类(不是接口)吗。2.你尝试了什么代码,什么失败了(把它放在你的问题中)。你以前试过模拟接口吗?没什么不同。三思而后行!IMHO模拟JPA完全是浪费时间。在我问你之前,我一直在尝试这样做,但我失败了,我听说模拟本地组件可能会有一些问题,可能会有一些特殊性。别急着说我没试过。我不知道本机组件是什么。你是说具体的类(不是接口)吗。2.你尝试了什么代码,失败了什么(把它放在你的问题中)。