我在尝试获取数据时收到异常,懒惰(最后异常)
//应用程序通过以下DAO获取数据。
public T findById(PK id) {
T result = getHibernateTemplate().get(this.type, id);
getHibernateTemplate().flush();
return result;
}
//Junit测试调用serviceX.getById
@Transactional
public SomeObject getById(int x){
return (SomeObject) aboveDao.findById(x);
}
//使用JUnit
SomeObject someObj = serviceX.getById(3);
someObj.getAnotherObject().y.equals("3"); //**Exception** at this line.
//某个对象类具有以下属性。
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
private AnotherObject anotherObject;
当我尝试访问jUnit中的另一个对象时,我得到了以下异常
方法已在额外配置中尝试
我们使用TransactionManager的spring注释。
还有,我尝试添加@ Transaction(Propagation = Propagation。REQUIRED)在JUnit之上,这并没有解决问题。如果我运行该应用程序,它可以正常工作,没有任何问题。
如何为JUnit解决此类问题?
org.hibernate.LazyInitializationException: failed to lazily initialize
a collection of role xxxxx , no session or session was closed
这可能对你有用 LazyInitilializationException
事情是这样的
SomeObject someObj = serviceX.getById(3); // @Transactional boundary, no more session
someObj.getAnotherObject().y.equals("3"); // session doesn't exist, can't fetch LAZY loaded object
因为您的antherObject
是LAZY
获取的,所以它实际上不会在getById()
方法中加载。当@Transactional
结束时,它关联的会话
丢失,即。当执行从getById()
返回时。因为不再有会话
,所以您会得到异常。
您可以将 FetchType
更改为 EAGER
。如果要转到对象的该字段,则需要在事务
边界中对其进行初始化。
如果您只在某些时候需要另一个对象,一种可能的解决方案是创建一个调用getById
并急切加载该对象的@Transactional
方法。
@Transactional
public SomeObject eagerGetById(int x){
SomeObject obj = getById(x);
obj.getAnotherObject(); // will force loading the object
return obj;
}
每当您需要急切地加载对象时调用此方法。
我构建了一个有3个属性的帐户类:余额、所有者、acctNo。帐户类有2个构造函数,一个接受3个属性,一个不接受数据。帐户类有设置和获取方法以及存款和取款方法。 我还构建了一个类,该类从类扩展而来。将此类修改为类后,取款方法或此方法尝试将余额设置为零以下,将抛出。 JUnit测试人员修改测试方法,将尝试提取超过当前余额的可用,所以做测试方法。我需要修改JUnit测试透支帐户,以便它捕获异常,并捕获。
我试图创建一个测试来验证我的代码(见下面的伪代码)是否正确捕获异常。我知道JUnit能够测试代码是否用以下代码抛出异常: 然而,我正在测试的软件的原始代码捕获了这个异常并打印了一条消息 JUnit是否有办法验证此消息?或者我应该改变一下我的流行语? 注:我已阅读,我应使用以下内容: 但是程序崩溃,因为它无法识别对象。 我尝试测试的方法的伪代码(出于隐私原因,不要发布确切的内容):
我试图在primefaces数据表设置中实现延迟加载。目前,在没有延迟加载实现的情况下,这是可行的,但是在实现延迟加载后,我在datatable中没有得到任何数据。但是,我可以在我的LoadData方法中打印我的列表,以验证数据是否正在加载到我的列表中,但一旦返回我的LazyModel并尝试加载datatable,似乎就会出现问题。这可能只是我忽略的一些简单的事情。非常感谢您的帮助! 这是我的屏幕
问题内容: 我真的是java的新手。 我正在构造函数上运行一些JUnit测试。构造函数是这样的:如果为其参数之一赋予null或空字符串,则应该抛出异常。 当我在JUnit中使用null或空字符串参数测试此构造函数时,即使我几乎100%确信将此类参数传递给它时,构造函数方法确实会引发异常,我也会看到一条红色的条。 如果该方法以预期的方式引发异常,则JUnit中是否应该没有绿色的条形?还是当异常抛出按
问题内容: 编辑:目前没有JUnit 4。 嗨,您好, 我对使用JUnit进行“智能”异常测试有疑问。目前,我这样做是这样的: 如您所见,对于每个应该引发异常的函数,我都需要一个try / catch块。似乎不是执行此操作的好方法-还是没有可能减少try / catch的使用? 问题答案: 我建议您需要分解为多个单独的测试。各个try / catch块似乎彼此非常独立。您可能还希望将通用初始化逻辑
我应该如何测试异常?我可以mock connector并且我可以赋予它抛出异常的行为,但是我不明白下一步该怎么做。