Java Spock Spring通过构造函数注入mock和bean

Java Spock Spring通过构造函数注入mock和bean,java,spring,unit-testing,dependency-injection,spock,Java,Spring,Unit Testing,Dependency Injection,Spock,我正在寻找如何在单个构造函数中注入bean和mock的方法 @Service public class SomeService { private EndpointUrlProvider endpointUrlProvider; private RestTemplate restTemplate; @Autowired public SomeService(EndpointUrlProvider endpointUrlProvider, RestTemplate restTemplate){

我正在寻找如何在单个构造函数中注入bean和mock的方法

@Service
public class SomeService {

private EndpointUrlProvider endpointUrlProvider;
private RestTemplate restTemplate;

@Autowired
public SomeService(EndpointUrlProvider endpointUrlProvider, RestTemplate restTemplate){
  this.endpointUrlProvider = endpointUrlProvider;
  this.restTemplate = restTemplate;
}
测试:


当我启动测试时,someService中的endpointUrlProvider为null。我做错了什么?测试这一点的最佳方法是什么?

据我所知,您正在尝试进行部分模拟。要注入Springbean,首先需要
TestContextManager
。因此,使用
SpringRunner
SpringJUnit4ClassRunner
运行测试。这应该可以完成以下工作:

@RunWith(SpringRunner.class)
public class SomeServiceTest {

    @Autowired
    private EndpointUrlProvider endpointUrlProvider;

    @Before
    public setUp() {
        RestTemplate restTemplate = mock(RestTemplate.class);
        SomeService someService = new SomeService(endpointUrlProvider, restTemplate);
    }
}

据我所知,你是在试图进行部分嘲弄。要注入Springbean,首先需要
TestContextManager
。因此,使用
SpringRunner
SpringJUnit4ClassRunner
运行测试。这应该可以完成以下工作:

@RunWith(SpringRunner.class)
public class SomeServiceTest {

    @Autowired
    private EndpointUrlProvider endpointUrlProvider;

    @Before
    public setUp() {
        RestTemplate restTemplate = mock(RestTemplate.class);
        SomeService someService = new SomeService(endpointUrlProvider, restTemplate);
    }
}

EndpointUrlProvider
应该是模拟的还是真实的bean?EndpointUrlProvider应该是模拟的还是真实的bean?