2015-06-15 5 views
3

У меня есть такие приложения Класс:Контекст конфигурации в тесте Спока

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
@ImportResource("classpath:applicationContext.xml") 
@EnableJpaRepositories("ibd.jpa") 
public class Application { 

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 
} 

Также я UserService класс (он обнаружил @EnableJpaRepositories ("ibd.jpa"))

@RestController 
@RequestMapping("/user") 
public class UserService { 

@Autowired 
private UserRepository userRepository; 

@RequestMapping(method = RequestMethod.POST) 
public User createUser(@RequestParam String login, @RequestParam String password){ 
    return userRepository.save(new User(login,password)); 
} 
******** 

И я стараюсь чтобы проверить UserService:

@ContextConfiguration 
class UserServiceTest extends Specification { 

@Autowired 
def UserService userService 


def "if User not exists 404 status in response sent and corresponding message shown"() { 
    when: 'rest account url is hit' 
    MockMvc mockMvc = standaloneSetup(userService).build() 
     def response = mockMvc.perform(get('/user?login=wrongusername&password=wrongPassword')).andReturn().response 
    then: 
     response.status == NOT_FOUND.value() 
     response.errorMessage == "Login or password is not correct" 

} 

Но вопрос: UserSer вице в тесте null - не подключен. Означает, что Контекст не загружен. Скажите, пожалуйста, где проблема в ContextConfiguration теста.

ответ

3

был решен:

@ContextConfiguration(loader = SpringApplicationContextLoader.class, classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest 

и использование RestTemplate

as in this question

1

расширяющегося на это, так как наемные хотел некоторые разработки: весна не телеграфировать фасоль по умолчанию в блоке тесты. Вот почему нужны эти аннотации. Я попытаюсь разбить их немного:

  • Использует SpringBootContextLoader в ContextLoader по умолчанию при не определена конкретная @ContextConfiguration (loader = ...).
  • Автоматически ищет @SpringBootConfiguration, когда вложенная @Configuration не используется, и явные классы не указаны.
  • @WebAppConfiguration добавляет контекст приложения, и должны быть использованы с ...
  • @ContextConfiguration фактически определяет, как загрузить метаданные «уровня класса».

Без этих аннотаций Spring не связывает бобы, необходимые для вашей тестовой конфигурации. Это частично по причинам производительности (большинство тестов не требуют настройки контекста).

+0

Не могли бы вы добавить примечания об использовании Spring (не SpringBoot)? –

+0

@ ДмитрийКулешов Последние две аннотации не относятся к Spring Boot. Я думаю, что первый можно заменить чем-то вроде «@RunWith», но я не уверен, поскольку я использовал их только с Spring Boot. Что конкретно вы пытаетесь сделать? – Igor

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