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 не делает этого?

Другие вопросы по тегам