Spring-Boot и Spock не работают при использовании Unroll
Я создаю демонстрационный проект с Spring-Boot. Для сохранения сущности я использую реализации репозитория, сгенерированные Spring на основе интерфейсов:
@Repository
public interface MovieRepository extends JpaRepository<Movie, Long> {
List<Movie> findByNameContaining(String name);
List<Movie> findByRelease(LocalDate release);
List<Movie> findByReleaseBetween(LocalDate start, LocalDate end);
List<Movie> findByNameContainingAndRelease(String name, LocalDate release);
}
Чтобы проверить это, я использую Спока с Groovy, который творит чудеса:
@RunWith(SpringRunner.class)
@ContextConfiguration
@SpringBootTest
class MovieRepositoryTest extends Specification {
@Autowired
MovieRepository movieRepository
@Test
def findByNameContaining_shouldFindCorrectMovies() {
given:
movieRepository = this.movieRepository
when:
def result = movieRepository.findByNameContaining("Iron Man")
then:
result.size() == 3
}
}
Но как только я пытаюсь смешать в @Unroll Спока, все рушится:
@Test
@Unroll
def findByNameContaining_shouldFindCorrectMovies() {
given:
movieRepository = this.movieRepository
when:
def result = movieRepository.findByNameContaining(query)
then:
result.size() == expected
where:
query || expected
"Iron Man" || 3
"Hulk" || 1
"Thor" || 3
"Avengers" || 3
"Thanos" || 0
"" || 20
}
Результаты в:
[INFO] Running com.spring.boot.demo.repositories.MovieRepositoryTest
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 s <<< FAILURE! - in com.spring.boot.demo.repositories.MovieRepositoryTest
[ERROR] initializationError(com.spring.boot.demo.repositories.MovieRepositoryTest) Time elapsed: 0.003 s <<< ERROR!
java.lang.Exception: Method $spock_feature_0_0 should have no parameters
Я не знаю, что может вызвать это. Любая помощь приветствуется. Спасибо
Редактировать 1: Ну, это интересно. Я пробовал следующее: * Удалить @Test -> java.lang.Exception: нет запускаемых методов * Удалить @RunWith и @ContextConfiguration -> Unroll работает, но movieRepository не вводится / проводной: java.lang.NullPointerException: не может вызвать метод findByNameContained () для нулевого объекта
Привязка к различным аннотациям не привела к рабочему сценарию. Есть догадки?
1 ответ
Да, я понял:
RunWith
был виновником. В моем Edit1 я заметил разницу с удалением @Test
, Это заставило меня задуматься о том, что я могу спутать тестирование JUnit со тестированием Спока. Так же No runnable methods
заставил меня задуматься И опуская @RunWith
так как в большинстве примеров Spock & Spring его в основном нет, это кажется хорошей идеей. И имея весенние бобы, связанные с @ContextConfiguration
довольно приятно;-). По-видимому, @SpringBootTest
не делает этого?