Spring-Boot и Spock не работают при использовании Unroll - PullRequest
0 голосов
/ 19 октября 2018

Я настраиваю демонстрационный проект с 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 () для нулевого объекта

Работа с различными аннотациями не привела к рабочему сценарию.Есть предположения?

1 Ответ

0 голосов
/ 21 октября 2018

Да, я понял:

RunWith был виновником.В моем Edit1 я заметил разницу с удалением @Test.Это заставило меня задуматься о том, что я могу спутать тестирование JUnit со тестированием Спока.Кроме того, No runnable methods заставил меня задуматься.И пропустить @RunWith, поскольку он в основном отсутствует в других примерах Spock & Spring, казалось хорошей идеей.И иметь весенние бобы, связанные с @ContextConfiguration, довольно приятно ;-).Видимо, @SpringBootTest не делает этого?

...