使用Unroll时Spring-Boot和Spock失败

时间:2018-10-19 13:58:40

标签: spring spring-boot spock unroll

我正在使用Spring-Boot建立一个演示项目。对于实体持久性,我使用基于接口的Spring生成的Repository实现:

df.A=df.A.str.rstrip('*').fillna(df.A)

要对此进行测试,我将Spock与Groovy结合使用,可以实现以下奇迹:

@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的@Unroll,一切都会崩溃:

@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
    }
}

结果:

@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
}

我不知道可能是什么原因引起的。 欢迎任何帮助。 谢谢

编辑1: 好吧,这很有趣。我尝试了以下方法: *删除@Test-> java.lang.Exception:没有可运行的方法 *删除@RunWith和@ContextConfiguration->展开有效,但是movieRepository没有注入/连接:java.lang.NullPointerException:无法在空对象上调用方法findByNameContaining()

尽管使用了不同的注释并没有导致可行的方案。有任何猜测吗?

1 个答案:

答案 0 :(得分:0)

是的,我知道了

RunWith是罪魁祸首。在Edit1中,我注意到删除@Test的区别。那让我想到我可能会将JUnit测试与Spock测试混淆了。另外,No runnable methods让我开始思考。并且省去@RunWith,因为在其他Spock&Spring示例中几乎不存在@ContextConfiguration似乎是个好主意。将Spring bean与@SpringBootTest连接起来非常好;-)。显然,+---------+---------+--------+------------+ | item_id | user_id | amount | time | +---------+---------+--------+------------+ | 3 | 2 | 500 | 1540152972 | | 3 | 4 | 500 | 1540151466 | +---------+---------+--------+------------+ 不这样做吗?