当前位置: 首页 > 知识库问答 >
问题:

我们需要在单元测试中测试findAll方法吗?

张可人
2023-03-14

我有以下服务方式:

public List<LabelDTO> findAllByLanguage(Language language) {
    final Map<Pair<UUID, String>, List<TextLabelTranslatable>> valueList = 
        translatableRepository.findAllTranslatable();
    
    // code omitted 

    return labelDTOList;
}

我正试图为此方法创建以下单元测试:

@Test
public void demo_test() {

    List<LabelWithTranslatable> labelWithTranslatableList = new ArrayList<>();

    LabelWithTranslatable labelWithTranslatable1 = mock(LabelWithTranslatable.class);
    labelWithTranslatable1.getEntity().setId(123L);
    labelWithTranslatableList.add(labelWithTranslatable1);

    LabelWithTranslatable labelWithTranslatable2 = mock(LabelWithTranslatable.class);
    labelWithTranslatable2.getEntity().setId(456L);
    labelWithTranslatableList.add(labelWithTranslatable2);

    // translatableRepository.findAllTranslatable() returns "List<LabelWithTranslatable>"
    when(translatableRepository.findAllTranslatable())
        .thenReturn(labelWithTranslatableList);

    List<LabelDTO> result = labelService.findAllByLanguage(SupportedLanguage.en);


    // assertions
}

我的问题是:

1.我们需要在单元测试中测试findall()方法吗?如果是这样,我们是否应该为列表创建多条记录,然后将返回的结果与预期的筛选值进行比较?

public interface LabelWithTranslatable extends 
                     GenericTranslatable<Label, LabelTranslatable> {
}

泛型可译:

public interface GenericTranslatable<E extends BaseEntity, T extends BaseTranslatableEntity> {
    E getEntity();

    T getTranslatable();
}

共有1个答案

姚实
2023-03-14

是的,您确实需要测试findallxxx方法--由问题中的//code省略注释表示的代码需要测试覆盖率。

正如您所建议的,您可以通过模拟底层存储库来实现这一点。

要模拟LabelwithTranslatable实例,您需要执行以下操作:

LabelWithTranslatable labelWithTranslatable1 = mock(LabelWithTranslatable.class);
Label label1 = mock(Label.class);
when(label1.getId()).thenReturn(123L);
when(labelWithTranslatable1.getEntity()).thenReturn(label1);
labelWithTranslatableList.add(labelWithTranslatable1);
 类似资料:
  • Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。

  • 英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其

  • 我启动了一个项目,现在项目中有大约7个测试,使用执行整个测试套件已经花费了一分钟多的时间。 从附加输出(标志)中,我可以看到,对于每个测试类和方法,整个quarkus应用程序以及mongodb实例等依赖项都会重新启动。 这与quarkus文档在测试指南页面上的内容完全相反: 到目前为止,在我们的所有示例中,我们只为所有测试启动Quarkus一次。在运行第一个测试之前,Quarkus将启动,然后所有

  • 问题内容: 我有以前具有大量方法的类,因此我将此方法的工作细分为“辅助”方法。 这些辅助方法声明为强制执行封装- 但是我想对大型公共方法进行单元测试。是否也可以对辅助方法进行单元测试,好象其中的一个失败,而调用它的公共方法也会失败,这样我们就可以确定为什么失败了? 另外,为了使用模拟对象测试这些对象,我需要将其可见性从私有更改为受保护,这是否可取? 问题答案: 一种方法是省略测试并将其放在同一程序

  • 测试失败,因为为。为什么不以阻塞的方式在ViewModel中运行块? 我知道,如果将其转换为返回对象的方法,则可以通过调用获取对象,或者可以返回并调用。但是,我想通过将我的ViewModel方法保留为函数来实现这一点,有没有办法做到这一点呢?