Я пишу модульный тест для контроллера, но когда мой тест достигает строки, где он вызвал этот метод
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:
Класс тестирования контроллера
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( loader = CustomContextLoader.class, locations = {"/applicationContext-web-test.xml","/applicationContext-web-mail-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests
Модель 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 .Но мне кажется, это не работает.
Кто-нибудь знает, как это исправить?