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

junit测试mockito NullPointerException

龚宏壮
2023-03-14

我正在使用Mockito编写一个JUnit测试用例,并得到一个NullPointerException。

在我的代码中是这样的:

@Service
@Transactional
public class OrganizationServiceImpl implements OrganizationService {

 private final OrganizationRepository organizationRepository;

 private final OrganizationMapper organizationMapper;

 private final OrganizationSearchRepository organizationSearchRepository;

 public OrganizationServiceImpl(OrganizationRepository organizationRepository, OrganizationMapper organizationMapper,
  OrganizationSearchRepository organizationSearchRepository) {
 this.organizationRepository = organizationRepository;
 this.organizationMapper = organizationMapper;
 this.organizationSearchRepository = organizationSearchRepository;
}

 @Override
 @Transactional(readOnly = true)
 public List<OrganizationDTO> findAll() {
  return organizationRepository.findAll().stream().map(organizationMapper::toDto).collect(Collectors.toCollection(LinkedList::new));
 }
}



@RunWith(MockitoJUnitRunner.class)
public class OrganizationServiceTest {

 @Mock
 private OrganizationRepository organizationRepository;

 @InjectMocks
 private OrganizationServiceImpl organizationService;

 OrganizationMapper organizationMapper = OrganizationMapper.INSTANCE;

 @Before
 public void setup() {
    MockitoAnnotations.initMocks(this);
 }

 @Test
 public void testGetAllOrganization() {
    List<Organization> organizationList = Arrays.asList(organizationInit());

    when(organizationRepository.findAll()).thenReturn(organizationList);

    List<OrganizationDTO> result = organizationService.findAll(); //NullPointerException
    assertEquals(3, result.size());
 }
}

共有1个答案

蒋招
2023-03-14

您永远不会嘲弄或将organizationmapper注入到您的服务中。injectmocks所做的是将您用mock注释的内容注入到您的OrganizationServiceImpl中,但是由于您没有在OrganizationMapper上使用mock,mockito不知道它需要使用它。类似这样的东西应该可以修复它:

public class OrganizationServiceTest {

 private OrganizationRepository organizationRepository;

 private OrganizationServiceImpl organizationService;

 private OrganizationSearchRepository searchRepository;

 private OrganizationMapper organizationMapper = OrganizationMapper.INSTANCE;

 @Before
 public void setup() {
    organizationRepository = Mockito.mock(OrganizationRepository.class);
    searchRepository = Mockito.mock(OrganizationSearchRepository.class);
    organizationService = new OrganizationServiceImpl(organizationRepository, organizationMapper, searchRepository);
 }

 @Test
 public void testGetAllOrganization() {
    List<Organization> organizationList = Arrays.asList(organizationInit());

    when(organizationRepository.findAll()).thenReturn(organizationList);

    List<OrganizationDTO> result = organizationService.findAll();
    assertEquals(3, result.size());
 }
}
 类似资料:
  • 我正在为Junit编写测试,以测试我编写的删除函数: 此方法适用于同时具有前后节点的双链接列表。 问题是:我们的大学将针对我们编写的测试运行错误代码,以确定我们是否编写了足够的测试来捕获错误代码和异常。 我知道他们将运行的两个测试,但不知道错误的含义。 > 失败:缺少逻辑 故障:缺少NextNodeRepairLogic 这是我没有考虑的两个测试,因为我无法理解这些错误的含义。有人知道这些错误可能

  • 我不能在HttpSession上进行模拟。测试方法如下所示: 测试结果如下所示: 我总是得到未经授权的例外,但我需要避免它。如何为会话添加一些参数来模拟工作?

  • 我在Java EE托管bean中有以下代码: 其中facesContextProvider是一个用于返回faces上下文的自定义类(对于模拟测试很有用)。 我想知道如何使用Mockito在JUnit中测试这一点。我正在尝试以下方法的组合: 那么单元测试工具将是: 然后单元测试代码将是:

  • 伙计们,我是JUnit测试的新手,并试图很好地掌握它,现在我正在为一个构造函数(用于创建有向图的有向图类)编写JUnit测试,该构造函数在读取负int值时抛出IllegalArgumentExctive,如果一切正常(节点值的数量)大于零,则创建一个图。 有向图类: 下面是我试图写的测试: 我应该如何使用一个(或两个)测试用例来测试这两个用例?如果“in”没有检测到-ve值,我就得到java。否则

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

  • 现在您已经了解了TestNG及其各种测试,您现在必须担心如何重构现有的JUnit代码。 没有必要担心,因为TestNG提供了一种按照自己的节奏从JUnit转换到TestNG的方法。 您可以使用TestNG执行现有的JUnit测试用例。 TestNG可以自动识别并运行JUnit测试,因此您可以将TestNG用作所有现有测试的运行器,并使用TestNG编写新测试。 您所要做的就是将JUnit库放在Te

  • 问题内容: 我真的是java的新手。 我正在构造函数上运行一些JUnit测试。构造函数是这样的:如果为其参数之一赋予null或空字符串,则应该抛出异常。 当我在JUnit中使用null或空字符串参数测试此构造函数时,即使我几乎100%确信将此类参数传递给它时,构造函数方法确实会引发异常,我也会看到一条红色的条。 如果该方法以预期的方式引发异常,则JUnit中是否应该没有绿色的条形?还是当异常抛出按