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

如何编写方法的单元测试?请为我解释

宋高谊
2023-03-14
public Set<String> getCompanyBlacklist(String companyİD, Pageable Pageable){
      long execStartTime = System.currentTimeMilis();
      log.info("Request with companyİD:{}", companyİD);

      List<BlackList> blackList = this.blacklistRepository.findByCompanyId(companyİD, Pageable);
      Set<String> set = blackListEntity.stream().map(be -> ne.getMsisdn()).collect(Collectors.toSet());

      log.info("finished execution in :{} MS, response size:{}", System.currentTimeMillis() - execStartTime, set.size());

      return set;
}

共有1个答案

宗政博
2023-03-14

您可以使用JUnit5,使用或不使用一些外部库(如Hamcrest或Mockito)来实现行为测试,模拟您的存储库并测试您是否获得了请求服务方法时需要获得的流数据。

作为Mockito的一个例子,您可以阅读@baeldung中关于Java 8新特性的网页(尤其是流部分):

举个例子,如果你有这样的接口:

public interface JobService {
    Stream<JobPosition> listJobs(Person person);
}

然后您可以用它进行测试:公共类UnemploymentServiceImpl实现UnemploymentService{

@Override
public Optional<JobPosition> searchJob(Person person, String searchString) {
    return jobService.listJobs(person)
      .filter((j) -> j.getTitle().contains(searchString))
      .findFirst();
    }
}

测试:

public class UnemploymentServiceImplUnitTest {

    @Mock
    private JobService jobService;

    @InjectMocks
    private UnemploymentServiceImpl unemploymentService;

    @Test
    public void givenReturnIsOfTypeOptional_whenMocked_thenValueIsEmpty() {
        Person person = new Person();

        when(jobService.findCurrentJobPosition(any(Person.class)))
      .thenReturn(Optional.empty());
    
        assertTrue(unemploymentService.personIsEntitledToUnemploymentSupport(person));
    }
}

希望你能理解这一点。还有很多额外的东西要做,比如模拟接口(jpa存储库就是接口)、测试默认值、测试可选值等等。

 类似资料:
  • 试图弄清楚我是否可以使用spring kafka和spring kafka测试为@KafkaListener编写单元测试。 我的听众课。 我的测试类别: 我的测试配置类: 有什么简单的方法可以做到这一点吗? 或者我应该以其他方式测试@KafkaListener?在单元测试中,如何确保在Kafka中收到新消息时调用@KafkaListener。

  • 问题内容: 我有一个Java课。如何进行 单元测试? 就我而言,我有课做一个二进制和。它需要两个数组,将它们求和,然后返回一个新的二进制数组。 问题答案: 使用正确的输入定义正常情况下的预期和期望输出。 现在,通过声明一个类来实现测试,将其命名为任何东西(通常是类似TestAddingModule之类的东西),并向其添加testAdd方法(即,类似于下面的方法): 编写一个方法,并在其上方添加@T

  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 我一直在学习使用Jest库编写JavaScript/TypeScript代码的单元测试。下面是一个我不知道如何处理的例子。它是用TypeScript输入的——只有两个公共方法和一个构造函数需要service1参数。 我想我需要测试两种情况: > 如果 函数为空。我没有在代码中看到它的任何实现,也不知道它是如何工作的。我应该把它作为参数传递给这个类的实例吗? 我很困惑,在这个特定的例子中,我应该使用