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

模拟存储库JUnit时的NullPointerException

韦胜泫
2023-03-14

我已经创建了一个包含控制器、服务和存储库层的基本Rest API。我现在正在尝试为通过产品ID查找产品的服务层方法编写一个单元测试。但是,当我运行测试时,它会在我试图模拟存储库findById()方法的行中抛出一个NullPointerException。

服务层中的getProductById()方法如下所示:

公共产品getProductById(String id){return ProductRepository.findById(id).orelse(null);}

我的服务层测试类:

package com.product.Services;

import com.product.Entities.Product;
import com.product.Repositories.ProductRepository;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)

class ProductServiceTest {

   @InjectMocks
   ProductService productService;

   @Mock
   ProductRepository productRepository;

   @Test
   void getProductById() throws Exception {

      Product product = new Product();
      product.setId("001");
      product.setName("TV");
      product.setPrice(999.99);

      when(productRepository.findById("001").orElse(null)).thenReturn(product);
      assertEquals(product,productService.getProductById("001"));
   }
}

共有1个答案

公孙涵育
2023-03-14

问题是这里使用了两个不同版本的JUnit:org.JUnit.jupiter.api.test来自JUnit5,而org.JUnit.runner.runwith来自Junit4。

runwith在Junit5中不再存在。

在本例中,我将使用JUnit4--即使用注释org.junit.test(而不是org.junit.jupiter.api.test)来注释测试。

 类似资料:
  • 谁能请解释我如何从控制器类模拟存储库。 在这个博客上发了这么多问题,但我没有得到任何回应。

  • 现在,当调用“/comments/1”时,我得到了404个错误,所以数据rest没有公开我的存储库。主要问题是“如何模拟存储库方法从数据库中获取数据?” 我的测试类: 据我所知,使用MockBean注释我替换了当前的存储库bean并且它不会被数据rest公开,我们有没有办法将数据预填充到db或存储库方法的模拟调用?

  • 问题内容: 我是Junit的新手,下面是我正在运行的junit代码。 这是我的API在ReportUtil中删除的HashedSettings 下面是我必须模拟的CollectionUtil中的createHashMap的代码。 这是我在运行junit测试用例时遇到的错误。 我正在使用嘲笑-all-1.10.19.jar,powermock-api-mockito-1.6.6.jar,powerm

  • 我试图测试一个服务方法,但为了做到这一点,我必须模拟我的ReportRepository。除了对Include方法的调用使模拟返回为NULL外,其他操作都很好。 下面返回预期的报告: 但该服务实际上执行以下操作: 问题是,当我在模拟中包含'include'方法时,返回的是null而不是预期的报告,因此我的测试以:

  • 我尝试使用以下代码模拟我的Runtime.getRuntime(): 但是我有以下错误:

  • 本节介绍与JUnit Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JUnit Mock Test I 问题1 - 以下哪项描述正确测试? A - 测试是检查应用程序功能的过程,是否按照要求运行。 B - 测试是单个实体(类或方法)的测试。 C - 以上两者。 D - 以上都