OpenEntityManagerInViewFilter在单元测试中不起作用

时间:2011-11-11 10:11:33

标签: spring unit-testing testing controller

我正在为控制器编写单元测试,但是当我的测试到达它调用此方法的行时

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类的一些摘录:

  1. 控制器测试类

    @Transactional
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration( loader = CustomContextLoader.class, locations = {"/applicationContext-web-test.xml","/applicationContext-web-mail-test.xml"})   
    public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests 
    
  2. 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 )
    
  3. 请注意,ProviderAuxiliaryAccount具有瞬态ProviderAccount属性。也, 我在我的控制器测试类中添加了@Transactional anotation,如此处所述。 OpenEntityManagerInView equivalent for Junit and Quartz Jobs。 但这似乎对我不起作用。

    有谁知道如何解决这个问题?

0 个答案:

没有答案