2015-08-07 2 views
1

У меня есть образец проекта here. Я хотел бы, чтобы тест JUnit установки сома с классом com.github.bilak.axonframework.poc.command.user.UserTest Когда я запускаю тест, я могу видеть в журналевесенний ботинок + junit + экстренный экземпляр компонента

Пропустив определение бина для [BeanMethod: имя = userCommandHandler, declaringClass = com.github.bilak.axonframework. poc.command.config.CommandConfiguration]: определение bean 'userCommandHandler' уже существует. Это определение верхнего уровня верхнего уровня считается переопределением.

И затем я вижу, что когда UserRepository вводится в UserCommandHandler, это еще один экземпляр, который используется в классе UserTest. Почему это делается и как я могу избежать этого?

Благодаря

ответ

0

Это потому, что боб имени userCommandHandler определяется дважды в контексте. Сначала в качестве аннотированного компонента com.github.bilak.axonframework.poc.command.user.UserCommandHandler, зарегистрированного при сканировании компонентов, второй как компонент, определенный в CommandConfiguration (строка 75).

И затем я вижу, что когда UserRepository вводится в UserCommandHandler, это другой экземпляр, который используется в классе UserTest.

Глядя на реализации GivenWhenThenTestFixture я могу видеть, что это на самом деле обертывания передается экземпляр в какой-то адаптер. Более того, поскольку то, что вы проходите, на самом деле является прокси-сервером Spring, который имеет правильную ссылку на userRepository (это верно, я полагаю), эффективный зарегистрированный обработчик также имеет значение null, поэтому из-за этого вы, вероятно, испытываете исключение из null-указателя. Если я изменю setUp для вашего теста:

@Before 
public void setup() throws Exception { 
    fixture = Fixtures.newGivenWhenThenFixture(User.class); 
    UserCommandHandler target = (UserCommandHandler) ((Advised) userCommandHandler).getTargetSource().getTarget(); 
    fixture.registerAnnotatedCommandHandler(target); 
} 

Это помогает.

+0

ОК это работает для меня ... но когда я переименую userCommandHandler в CommandConfiguration, это не работает? – bilak

+0

уверен, только вам нужно будет использовать квалификаторы, чтобы решить, какой из них нужно ввести в ваш тест. Это только разрешает предупреждение _Skipping bean definition_, но прокси-сервер является отдельной проблемой. – macias

Смежные вопросы