groovy spock 模拟 spring 自动装配的 bean
groovy spock mocking spring autowired beans
我有豆子:
@Service
public class EQueueBookingService {
@Autowired
public EQueueBookingClient eQueueBookingClient;
并且我尝试使用 Spock 为这个 bean EQueueBookingService 编写一些测试。
https://code.google.com/p/spock/wiki/SpockBasics
我的模拟是
class EQueueBookingServiceTest extends Specification {
@Autowired
EQueueBookingService testedService;
EQueueBookingClient eQueueBookingClient = Mock(EQueueBookingClient);
def setup() {
testedService.eQueueBookingClient = eQueueBookingClient;
}
及测试方法:
...
setup:
CancelBookingResponse response = new CancelBookingResponse();
...
eQueueBookingClient.cancelBooking(_, _) >> response;
when:
def result = testedService.cancelBooking(request);
then:
result != null && result.bookId == bookId
为什么 eQueueBookingClient 不模拟?
当我调试它时:在测试中 - 我看到 Mock 实例,当我转到方法时 - 我看到真实的 bean 实例。
非常感谢!
我找到解决办法了!
需要为此客户端实施 setter 并在设置中使用它,例如:
private EQueueBookingClient eQueueBookingClient = Mock(EQueueBookingClient);
def setup() {
testedService.setBookingClient(eQueueBookingClient);
}
如果将服务中的客户端定义为public并使用=则不起作用;
例如:
testedService.eQueueBookingClient = eQueueBookingClient;//mocked instance doesn't work
我有豆子:
@Service
public class EQueueBookingService {
@Autowired
public EQueueBookingClient eQueueBookingClient;
并且我尝试使用 Spock 为这个 bean EQueueBookingService 编写一些测试。 https://code.google.com/p/spock/wiki/SpockBasics
我的模拟是
class EQueueBookingServiceTest extends Specification {
@Autowired
EQueueBookingService testedService;
EQueueBookingClient eQueueBookingClient = Mock(EQueueBookingClient);
def setup() {
testedService.eQueueBookingClient = eQueueBookingClient;
}
及测试方法:
...
setup:
CancelBookingResponse response = new CancelBookingResponse();
...
eQueueBookingClient.cancelBooking(_, _) >> response;
when:
def result = testedService.cancelBooking(request);
then:
result != null && result.bookId == bookId
为什么 eQueueBookingClient 不模拟?
当我调试它时:在测试中 - 我看到 Mock 实例,当我转到方法时 - 我看到真实的 bean 实例。
非常感谢!
我找到解决办法了!
需要为此客户端实施 setter 并在设置中使用它,例如:
private EQueueBookingClient eQueueBookingClient = Mock(EQueueBookingClient);
def setup() {
testedService.setBookingClient(eQueueBookingClient);
}
如果将服务中的客户端定义为public并使用=则不起作用; 例如:
testedService.eQueueBookingClient = eQueueBookingClient;//mocked instance doesn't work