【发布时间】:2021-07-27 02:27:37
【问题描述】:
我有一个方法可以像这样更新 MongoDB 中的数据:
public Mono<SomeDTO> DoAction(SomeDTO someDTOObject) {
return findUser(someDTOObject.getUsername())
.flatMap(existingUser -> {
Update update = new Update();
return mongoTemplate.upsert(
Query.query(Criteria.where("username").is(someDTOObject.getUsername())),
update,
SomeDTO.class,
COLLECTION_NAME)
.flatMap(updateResult -> { /////// exception thrown from here
if(updateResult.wasAcknowledged())
return Mono.just(existingUser);
else
return Mono.error(new Exception("Unable to update customer"));
});
}).switchIfEmpty(
Mono.defer(() -> {
return Mono.error(new Exception("User Name doesn't exist."));
})
);
}
上述方法的测试方法是这样的:
@Test
public void DoAction_TestException() {
SomeDTO someDTOObject = databaseUtil.SomeDTOMock;
Query query = Query.query(Criteria.where("username").regex("^"+userId+"$","i"));
doReturn(Mono.empty()).when(mongoTemplate).findOne(query,
SomeDTO.class, "COLLECTION_NAME");
UpdateResult acknowledged = UpdateResult.acknowledged(1, 1L, null);
doReturn(Mono.just(acknowledged)).when(mongoTemplate).upsert(
Query.query(Criteria.where("username").is(userId)),
update,
SomeDTO.class,
"COLLECTION_NAME");
SomeDTO someDTOObjectResult = mongoImpl.DoAction(someDTOObject).block();
assertEquals(someDTOObject, someDTOObjectResult);
}
当我运行/调试此测试方法时,会在 cmets 中涉及的行抛出 NullPOinterException。
谁能告诉我我在这里做错了什么?非常感谢。
【问题讨论】:
-
显示 UpdateResult 类代码
-
@bimjhi,这是一个 mongo 客户端类:mongodb.github.io/mongo-java-driver/3.6/javadoc/com/mongodb/…
-
提供的信息还不够。我们不知道您的 main 方法以及您初始化 updateResult 引用的方式。
-
除了测试方法中显示的内容外,我没有在代码中的任何地方初始化 updateResult。
-
这段代码是用java编写的API的一部分。有一个控制器方法,我们通过它接收 someDTOObject 作为主体。我将相同的对象发送到存储库以在数据库中更新。
标签: java nullpointerexception mockito mono