我在编写公司项目的测试用例的时候,碰到这种情况:
在一个类的方法中有一个参数需要通过启动一个很复杂的服务从而获取到,
类似于:
我有一个测试用例ADao——>我需要将这个测试用例注入到测试类B的入口中B.b(Adao)——>但B的类需要调用一个类C中的方法c,这个方法c中有一个参数value需要启动一个远程的fienclient服务才能得到——>String value = fienclient.getCode("msg");
但是在实际执行测试的时候,是不可能去一步步启动这些服务从来获取这个参数的值的,所以我想知道有没有mock之类的方法模拟一个值来替代实际的值的从而不让用例来跑真正的服务,或者是在不启动服务的情况下来获取这个服务中的实例呢?
PS:报错信息
java.lang.IllegalArgumentException: instance can not be null
at org.springframework.util.Assert.notNull(Assert.java:134)
at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.reconstructURI(RibbonLoadBalancerClient.java:48)
at io.github.jhipster.security.uaa.LoadBalancedResourceDetails.getAccessTokenUri(LoadBalancedResourceDetails.java:48)
at org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport.getAccessTokenUri(OAuth2AccessTokenSupport.java:156)
at org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport.retrieveToken(OAuth2AccessTokenSupport.java:137)
at org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsAccessTokenProvider.obtainAccessToken(ClientCredentialsAccessTokenProvider.java:44)
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainNewAccessTokenInternal(AccessTokenProviderChain.java:148)
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainAccessToken(AccessTokenProviderChain.java:121)
at org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor.acquireAccessToken(OAuth2FeignRequestInterceptor.java:171)
at org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor.getToken(OAuth2FeignRequestInterceptor.java:127)
at org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor.extract(OAuth2FeignRequestInterceptor.java:112)
at org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor.apply(OAuth2FeignRequestInterceptor.java:100)
at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:158)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:88)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
at com.sun.proxy.$Proxy190.getNextSequenceGenerateCode(Unknown Source)
at com.kirincs.fund.bookkeeper.service.impl.VoucherServiceImpl.save(VoucherServiceImpl.java:33)
定位到项目中就是我说的那个情况。