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中正确测试
答案 0 :(得分:2)
Spock模拟定义为@Shared
时不起作用,但这不是你的问题。您缺少@ContextConfiguration
或@SpringBootTest
注释,因此实际使用了spring并且可以注入bean。还要确保对类路径具有spock-spring
依赖性。
作为旁注,您也可以使用
expect:
accountRepository.count() == old(accountRepository.count()) + 1
说入门人数应该增加。
答案 1 :(得分:1)
问题在于,您无需与存储库进行交互,而是与模拟进行交互。
在setupSpec中,您将使用模拟替换注入的存储库,模拟在与其count方法交互时默认返回0。删除setupSpec部分以与真实注入的存储库进行交互。