java - 使用 java springboot mongodb 进行部分更新的 JUNIT 测试

标签 java mongodb junit mocking

您好,我是 JUnit 测试和 Mockito 的新手,我的问题是如何在我的 customArticleRepository 中为这个自定义部分更新方法编写单元测试,该方法没有返回参数? 我有一个名为 Article 的 POJO 对象,我想部分更新它。 REST 端点 PUT 获取 DTO 对象 Classification Mask ,并将特定更新值作为请求正文,调用服务层 ArticleService,它调用我的 CustomArticleRepository方法。

这是我的文章对象

public class Article {

private String id;
@Field("_cls")
private String inheritance;
private String title;
private Date published;
private String content;
private String link;

private String summary;
private String description;
private Date updated;
private String primary;
private String[] secondary;
private String category;
private String[] categories;
private String person;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date deleted_date;

private Boolean is_new;

private Boolean edited;
private Aws aws;

这是我的 DTO 对象

public class ClassificationMask {
private String id;
private String title;
private String content;
private String primary;
private String[] secondary;

private Float sentiment_positive;
private Float sentiment_negative;
private Float sentiment_neutral;
private Float sentiment_mixed;

private String category;
private String person;
private Boolean is_new;
private Datasource datasource;

这是我在存储库中的部分更新方法

public void partialUpdateMask(String id, ClassificationMask articleUpdate) {
    Query query = new Query(where("id").is(id));
    Update update = new Update();

    if(articleUpdate.getPrimary() !=null) { update.set("primary", articleUpdate.getPrimary()); }
    if(articleUpdate.getSecondary() !=null){ update.set("secondary", articleUpdate.getSecondary());}
    if(articleUpdate.getCategory() !=null){ update.set("category", articleUpdate.getCategory());}
    if(articleUpdate.getPerson() !=null){ update.set("person",articleUpdate.getPerson());}
    if(articleUpdate.getIs_new() !=null){ update.set("is_new",articleUpdate.getIs_new()); }

    update.set("edited",true);
    mongoTemplate.updateFirst(query,update ,Article.class);
}

最佳答案

测试我们可以拥有的 void 方法:

  1. 修改被测对象状态的方法:以便您可以验证 sut 的状态是否与您的方面一致
  2. 该方法不会修改 SUT 的状态,但会在数据库上写入数据,以便您可以验证 DAO 是否已被调用

这是第二种情况,你可以有这样的东西:

Mockito.verify(mongoTemplate).updateFirst(query, update, Article.class);

通过这种方式,您可以测试

  1. 该方法确实调用了 updateFirst
  2. 使用正确参数调用 updateFirst 方法

关于java - 使用 java springboot mongodb 进行部分更新的 JUNIT 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59568112/

相关文章:

java - Spring Data MongoDB 聚合 $out 管道

java - PowerMock::[java.lang.IllegalStateException:没有对可用模拟的最后一次调用]

java - Mockito anyBoolean() 返回时匹配器异常

java - 无法从字符串转换为整数

java - Tibco 与 JMS 应用程序

java - 如何在EditText中添加数字分隔符

node.js - 防止并发访问 Mongoose 中的文档

node.js - 如何在 Mongoose/Node.js 中同时保存多个文档?

postgresql - 用于 Java JUnit 测试的嵌入式 PostgreSQL

Java、MyFaces 1.1、Tobago 以及如何创建可重用的 Web 组件