我在micronaut中有以下接口来执行HTTP POST请求:
@Client("shoppingCenter")
@SubscriptionKey
interface ApiClient {
@Post("/shoppingcenter/api/Order")
OrderResponse createResponse(@Body OrderRequest request);
}
我有一个调用接口的类:
public class OrderService {
@Inject
ApiClient apiClient;
public void sendNewOrder(String item) {
OrderRequest request = new OrderRequest.builder()
// ..builder code
OrderResponse response = apiClient.createResponse(request);
}
}
我想在我的spock测试中模拟/存根API调用,我尝试了以下方法:
apiClient.createResponse(request) >> new OrderResponse("orderID")
class OrderServiceSpec extends ApplicationContextSpecification implements RepositoriesFixture, LeakageDetector {
@Subject
@Shared
OrderService OrderService = applicationContext.getBean(OrderService)
def 'test "sendNewOrder"' (){
given: 'Item'
ApiClient apiClient = Stub()
OrderRequest request = new OrderRequest();
apiClient.createResponse(request) >> new OrderResponse("orderID")
when:
OrderService.sendNewOrder("someItem")
then:
noExceptionThrown()
cleanup:
//...
}
}
然而,我得到的错误:
Expected no exception to be thrown, but got 'io.micronaut.discovery.exceptions.NoAvailableServiceException'
at spock.lang.Specification.noExceptionThrown(Specification.java:118)
at com.daimler.api.notification.NotificationServiceSpec.test "sendNewOrder"(OrderServiceSpec.groovy:46)
Caused by: io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: shopping-center
at io.micronaut.http.client.loadbalance.AbstractRoundRobinLoadBalancer.getNextAvailable(AbstractRoundRobinLoadBalancer.java:50)
at io.micronaut.core.async.publisher.Publishers$1.doOnNext(Publishers.java:214)
我认为,你应该阅读一些基本的Micronaut留档,例如。Micronaut测试-使用Spock测试,尤其是“使用Spock Mocks”部分。就像我在评论中说的,我以前从未使用过Micronaut。但是我能够在10秒内通过谷歌micronaut test mock
找到这个。
本质上,我有一个Java类,它在套接字通道上执行选择,我想存根通道,这样我就可以按预期测试选择工作。 例如,这大致就是被测试的类所做的: 我希望能够测试这样的东西: 这是基于一个真实的例子,但细节并不重要。总体目标是如何存根支持选择的SocketChannel,这样我就不必创建真正的客户机进行测试。 我也知道这比简单地截取SocketChannel更复杂:似乎我需要截取或以某种方式提供自定义系统默
我有一个用注释的Groovy类,因此它得到一个私有的最终字段,我想测试它的用法。我想继续使用,而不是为了启用测试而进一步公开字段。 我正在使用Spock1.0编写测试,并尝试使用Spock的集成、模拟和截尾功能来完成测试。全局截尾可以帮助我截取调用以获得实际的实例,因此我目前的猜测是: 有趣的是,拦截实际上起作用了,确认类实际上获得了名为“dummy”的类型“logger”的对象
这里,在引擎盖下调用。因此,我需要我的模拟实例返回(指示失败的auth),或者在发生意外情况时抛出。 你知道我该怎么做吗?
我用代码编写了以下旧方法,用于访问服务类中的请求对象,例如:
所以我想做一些事情 但我得到了空异常