OpenEntityManagerInViewFilter не работает в модульном тесте - PullRequest
3 голосов
/ 11 ноября 2011

Я пишу модульный тест для контроллера, но когда мой тест достигает строки, где он вызвал этот метод

private Predicate predicate( final Integer pid )
{
    return
            new Predicate()
            {
                public boolean evaluate( Object o )
                {
                    ProviderAuxiliaryAccount proAux = ( ProviderAuxiliaryAccount) o;
                    return proAux.getProviderAccount().getId() == pid;
                }
            };
}

В этой строке выдается исключение NullPointerException:

returnproAux.getProviderAccount (). getId () == pid;

Когда я проверял объект ProviderAuxiliAccount, он не может получить свое свойство 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. Модель ProviderAuxiliAccount

       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 )
    

Обратите внимание, что ProviderAuxiliAccount имеет временное свойство ProviderAccount.Кроме того, я добавил аннотацию @Transactional в моем тестовом классе контроллера, как указано здесь. Эквивалент OpenEntityManagerInView для Junit и Quartz Jobs .Но мне кажется, это не работает.

Кто-нибудь знает, как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...