Tôi có một lớp lưu trữ các giá trị trong redis. Khi tôi kiểm tra nó, nó hoạt động tốt. Nếu tôi chạy nó cho cuốn sách thứ hai thì không thành công vì đã có mục trên redis. Tôi muốn xóa cơ sở dữ liệu redis trước khi chạy thử nghiệm và sau khi thử nghiệm hoàn tất nhưng tôi không thể làm điều đó.
Tôi đang chạy grails 2.2.4.
tôi đã cố gắng@autowired
chú thích,@mock(RedisService)
,bên cạnh đóredisService = grails.util.Holders.applicationContext.getBean('redisService' ) dưới dạng RedisService
Và tôi không thể tạo một phiên bản redisService.
Đây là những gì tôi muốn làm:
redisService.withRedis { Jedis redis ->
redis.del("kiểm tra")
}
Kết quả mong đợi là mục này sẽ bị xóa khỏi redis.
Tôi gặp một số lỗi như: java.lang.NullPointerException: Không thể lấy thuộc tính 'tài nguyên' trên đối tượng null và java.lang.IllegalArgumentException: ServletContext không thể rỗng
Bất kỳ trợ giúp sẽ được đánh giá rất cao.
Nếu bạn giống tôi và đang thắc mắc làm thế nào tôi có thể làm được điều này:
@Mock(RedisService) // trên định nghĩa lớp
thiết lập chắc chắn(){
def redisPoolMock = đối tượng mới()
redisPoolMock.metaClass.getResource = { ->
ném JedisConnectionException mới ('Được tạo bởi redisPool bị chế nhạo')
// Hoặc bạn có thể đặt giá trị vào đây
}
redisService = RedisService mới()
redisService.redisPool = redisPoolMock
service.redisService = redisService
}
Bây giờ bạn có thể kiểm tra dịch vụ của mình.
Về java - Làm cách nào tôi có thể sử dụng redisService trong thử nghiệm spock. Tôi cần dọn dẹp cơ sở dữ liệu redis để thiết lập và dọn dẹp, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/57615474/
Tôi là một lập trình viên xuất sắc, rất giỏi!