Я настраиваю демонстрационный проект с 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);
}
Чтобы проверить это, я использую Spock с 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 () для нулевого объекта
Работа с различными аннотациями не привела к рабочему сценарию.Есть предположения?