Junit 如何模拟链式方法?

Junit 如何模拟链式方法?,junit,java-8,mocking,Junit,Java 8,Mocking,我正在为一个应用程序类编写单元测试用例,因为类中的所有代码都是用java8编写的,所以为它编写测试用例有点棘手。我遇到了需要模拟方法链接的情况 @Override public Single<MetadataManagerDeleteAttributeResponseV1> processEvent( Context context, MetadataManagerDeleteAttributeV1 event) { Database worldviewDa

我正在为一个应用程序类编写单元测试用例,因为类中的所有代码都是用java8编写的,所以为它编写测试用例有点棘手。我遇到了需要模拟方法链接的情况

@Override
public Single<MetadataManagerDeleteAttributeResponseV1> processEvent(
        Context context, MetadataManagerDeleteAttributeV1 event) {

    Database worldviewDatabase = context.client().database();

    String primaryKey = "metadata-manager:attribute:v1.json" + SCHEMA_CONNECTOR + event.getId();

    System.out.println(worldviewDatabase.deleteOne(primaryKey, WriteContext.builder().build()).map(deleteResultTry->deleteResultTry.get().ids()));

    //database object is of type single<try<deleteTry>>>
    return worldviewDatabase
            .deleteOne(primaryKey, WriteContext.builder().build())
            .map(deleteResultTry -> handleResponse(deleteResultTry, primaryKey))
            .map(Try::get);
}

public Try<MetadataManagerDeleteAttributeResponseV1> handleResponse(
        Try<DeleteResult> result, String primaryKey) {
   return result
           .filter(res -> !res.ids().isEmpty())
           .flatMap(res -> Try.fromOptional(res.ids().stream().findFirst()))
           .map(id -> {
               var response = new MetadataManagerDeleteAttributeResponseV1();
                   return response.withId(id.split(SCHEMA_CONNECTOR)[1]);
           }).mapException(e -> handleError(e, primaryKey));
}

private HttpCodedException handleError(Throwable error, String primaryKey) {
    if (error instanceof NoSuchElementException) {
        logger.warn("DeleteAttributeMetadataManagerV1Handler: object with " + primaryKey + " does not exist");
        return new HttpCodedException(HandlerErrorCode._404_NOT_FOUND,
               "object with " + primaryKey + " does not exist");
    } else {
        logger.error("DeleteAttributeMetadataManagerV1Handler error occurs: " + error.getMessage());
        return new HttpCodedException(HandlerErrorCode._500_INTERNAL_SERVER_ERROR, "error occurs during"
                + " deleting object with " + primaryKey + ": " + error.getMessage());
    }
}
我想知道我可以采取什么方法来模拟在一个语句中链接在一起的所有方法


谢谢

您需要将方法链调用划分为几个小部分。 例如:

使你的方法无效someObject someObject { someObject.someMethod1.someMethod2.someMethod3; } 测试:

@嘲弄 某物某物; 当someobject.someMethod1.然后返回someobject2; 当someobject2.someMethod2.Then returnsomeobject3; 当someobject3.someMethod3.Then returnsomeobject4;
如果有任何疑问或问题,请告诉我。

这是否回答了您的问题?
return worldviewDatabase
                .deleteOne(primaryKey, WriteContext.builder().build())
                .map(deleteResultTry -> handleResponse(deleteResultTry, primaryKey))
                .map(Try::get);