在spock

时间:2017-06-20 13:45:19

标签: groovy spock spring-test

AccountsRepository

public interface AccountsRepository extends JpaRepository<Account, Long> {}

AccountsEndpointTest

class AccountsEndpointTest extends Specification {
  @Shared @Autowired AccountsRepository accountRepository
  @Shared def entriesCount

  def setupSpec() {
     accountRepository = Mock()
  }

  def "create user"() {
    given: "the current number of rows in accounts table"
    entriesCount = accountRepository.count()

    when: "add endpoint is invoked"
    // send /user/add request

    expect: 
    entriesCount < accountRepository.count()

  }
}

entriesCount在给定期望块中为我提供 O 。我手动测试了它,返回非零,因为表有条目。如何在spock中正确测试

2 个答案:

答案 0 :(得分:2)

Spock模拟定义为@Shared时不起作用,但这不是你的问题。您缺少@ContextConfiguration@SpringBootTest注释,因此实际使用了spring并且可以注入bean。还要确保对类路径具有spock-spring依赖性。

作为旁注,您也可以使用

expect: 
accountRepository.count() == old(accountRepository.count()) + 1

说入门人数应该增加。

答案 1 :(得分:1)

问题在于,您无需与存储库进行交互,而是与模拟进行交互。

在setupSpec中,您将使用模拟替换注入的存储库,模拟在与其count方法交互时默认返回0。删除setupSpec部分以与真实注入的存储库进行交互。