【问题标题】:Spock Spring inject mock and bean via constructorSpock Spring 通过构造函数注入 mock 和 bean
【发布时间】:2018-04-29 20:51:36
【问题描述】:

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

@Service
public class SomeService {

private EndpointUrlProvider endpointUrlProvider;
private RestTemplate restTemplate;

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

测试:

class SomeTest extends Specification {

@Autowired
EndpointUrlProvider endpointUrlProvider

RestTemplate restTemplate = Mock {
    postForEntity(_, _, SomeResponse.class) >> new ResponseEntity(new SomeResponse(), HttpStatus.OK)
 }

SomeService someService = new SomeService(endpointUrlProvider, restTemplate)

//some tests
    }

当我在 someService 中进行测试时,我的 endpointUrlProvider 为空。我做错了什么?对此进行测试的最佳方法是什么?

【问题讨论】:

  • EndpointUrlProvider 也应该是模拟的还是真正的 bean?

标签: java spring unit-testing dependency-injection spock


【解决方案1】:

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

@RunWith(SpringRunner.class)
public class SomeServiceTest {

    @Autowired
    private EndpointUrlProvider endpointUrlProvider;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多