我正在为控制器编写单元测试,但是当我的测试到达它调用此方法的行时
private Predicate predicate( final Integer pid )
{
return
new Predicate()
{
public boolean evaluate( Object o )
{
ProviderAuxiliaryAccount proAux = ( ProviderAuxiliaryAccount) o;
return proAux.getProviderAccount().getId() == pid;
}
};
}
它会在此行上抛出NullPointerException:
返回proAux.getProviderAccount()。getId()== pid;
当我检查ProviderAuxiliaryAccount对象时,似乎无法检索其ProviderAccount属性。因此,调用getProviderAccount()。getId()肯定会触发空指针异常。但这只发生在单元测试期间。我怀疑OpenEntityManagerInViewFilter不能进行单元测试。
以下是我的java类的一些摘录:
控制器测试类
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( loader = CustomContextLoader.class, locations = {"/applicationContext-web-test.xml","/applicationContext-web-mail-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests
ProviderAuxiliaryAccount模型
public class ProviderAuxiliaryAccount
implements Serializable
{
private static final long serialVersionUID = 1L;
private Integer id;
private Integer providerId;
@XmlTransient
private ProviderAccount providerAccount;
3.这是我实际控制器中调用方法'谓词'的部分。
List<AuxiliaryAccount> accounts = auxiliaryService.getAuxiliaryAccounts( account.getPerson() );
ProviderAccount provider = auxiliaryService.getProviderAccount( UserAccountUtil.getUserName() );
AuxiliaryAccount aux =
( AuxiliaryAccount ) CollectionUtils.find( accounts, PredicateUtils.notNullPredicate() );
Integer pid = provider.getId();
if ( CollectionUtils.find( aux.getProviderAuxiliaryAccounts(), predicate( pid ) ) != null )
请注意,ProviderAuxiliaryAccount具有瞬态ProviderAccount属性。也, 我在我的控制器测试类中添加了@Transactional anotation,如此处所述。 OpenEntityManagerInView equivalent for Junit and Quartz Jobs。 但这似乎对我不起作用。
有谁知道如何解决这个问题?