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

利用Mockito实现Junits

华展鹏
2023-03-14

Webservice->实现层->Dao层。

实现层实际上将DAO对象转换为业务对象,并将其传递回服务。

我的目标是为服务层编写JUnit。现在,为了实现这一点,我使用@mock和@injectmocks来模拟实现层中的值,因为实现层使用的是spring注释字段。但每次测试时都会出现空指针异常。下面是代码

@Override
    public FicheSolvaDetailDTO consulterFicheSolvabiliteTriennale(Long numFicheSolva) throws MetierException, TechniqueException {
        try {

            LOGGER.info("Consultation de la fiche de solvabilité triennale n° " + numFicheSolva);
            return boToMessageConverter.convertFicheSolvabiliteDetaillee(manager.consulterFicheSolvabiliteTriennale(numFicheSolva));

        } catch (com.accord.contrat.business.exception.MetierException e) {
            throw new MetierException(e.getMessage(), e);
        } catch (com.accord.contrat.business.exception.TechniqueException e) {
            throw new TechniqueException(e.getMessage(), e);
        }
    }
@Override
    public FicheSolvaDetailDTO consulterFicheSolvabiliteTriennale(Long numFicheSolva) throws MetierException, TechniqueException {
        try {

            LOGGER.info("Consultation de la fiche de solvabilité triennale n° " + numFicheSolva);
            return boToMessageConverter.convertFicheSolvabiliteDetaillee(manager.consulterFicheSolvabiliteTriennale(numFicheSolva));

        } catch (com.accord.contrat.business.exception.MetierException e) {
            throw new MetierException(e.getMessage(), e);
        } catch (com.accord.contrat.business.exception.TechniqueException e) {
            throw new TechniqueException(e.getMessage(), e);
        }
    }

测试类:

@RunWith(MockitoJUnitRunner.class)
public class SolvabiliteWSImplTest {
    @InjectMocks
    private static SolvabiliteWSImpl mockedSolvabiliteWSImpl;
    private static FicheSolvabiliteDetailBO ficheSolvabiliteDetailBO;

    @Mock
    IFicheSolvaManager managera;
    @Mock
    BOToMessageConverter boToMessageConverter;

    @Mock
    MessageToBOConverter messageToBo;

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

    @Before
    public void setUp() throws MetierException, TechniqueException{

        ficheSolvabiliteDetailBO = new FicheSolvabiliteDetailBO();
        ficheSolvabiliteDetailBO.setCodeSituationFamilialeSouscripteur("1");
        ficheSolvabiliteDetailBO.setCodeSituationLocativeFoyer("1");
        ficheSolvabiliteDetailBO.setNumCommercant(705l);
        ficheSolvabiliteDetailBO.setNumEngagement(44686301l);
        ficheSolvabiliteDetailBO.setNumFicheSolva(138553l);

        when(managera.consulterFicheSolvabiliteTriennale(138553l)).thenReturn(ficheSolvabiliteDetailBO);

    }



    @Test
    public void testConsulterFicheSolvaDetailDTO() throws MetierException, TechniqueException{
        long numFicheSolve = 138553l;
        assertNotNull(mockedSolvabiliteWSImpl.consulterFicheSolvabiliteTriennale(numFicheSolve));
}

但它并不是在嘲弄价值,如

当(managera.consulterfichesolvabilitetriennale(138553L)).thenreturn(ficheSolvabiliteDetailBO);

当调用上述方法时,它应该返回给我ficheSolvabiliteDetailBO。但是函数进一步进入这个方法,然后给我空指针异常,这意味着它不是在嘲弄?

请建议一种可能的测试方法。

共有1个答案

程和蔼
2023-03-14

a)你有

@InjectMocks
private static SolvabiliteWSImpl mockedSolvabiliteWSImpl;

在静态字段上。这不起作用--将其更改为实例字段。JUnit将为每次测试运行创建一个新实例

b)你不需要

MockitoAnnotations.initMocks(this);
@RunWith(MockitoJUnitRunner.class)
 类似资料:
  • 问题内容: 我对Spring框架还很陌生,并且在设置我当前正在研究的项目时遇到了一些麻烦。我需要能够连接到两个不同的数据库,一个是MongoDB,另一个是MSSQL。我正在使用JPA连接到MSSQL。 我遇到的问题是,当我希望它对MSSQL进行调用时,它似乎正在尝试对Mongo数据库进行调用,而我不确定如何告诉它要读取的内容。我看到过这些帖子建议使用注释将其定向到正确的实现,但是我认为这对我的情况

  • 本文向大家介绍利用Javascript实现BMI计算器,包括了利用Javascript实现BMI计算器的使用技巧和注意事项,需要的朋友参考一下 前言 BMI指数(英文为Body Mass Index),是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标。本文将介绍如何用JavaScript实现

  • 本文向大家介绍利用python实现数据分析,包括了利用python实现数据分析的使用技巧和注意事项,需要的朋友参考一下 1:文件内容格式为json的数据如何解析 2:出现频率统计 3:重新加载module的方法py3 4:pylab中包含了哪些module    from pylab import * 等效于下面的导入语句:

  • 本文向大家介绍利用C#实现网络爬虫,包括了利用C#实现网络爬虫的使用技巧和注意事项,需要的朋友参考一下 网络爬虫在信息检索与处理中有很大的作用,是收集网络信息的重要工具。 接下来就介绍一下爬虫的简单实现。 爬虫的工作流程如下 爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载完毕为止。 下面开始逐步分析爬虫的实现。 1. 待下载集合与已下载集合 为了保存需要下载的URL

  • 本文向大家介绍Android利用爬虫实现模拟登录的实现实例,包括了Android利用爬虫实现模拟登录的实现实例的使用技巧和注意事项,需要的朋友参考一下 Android利用爬虫实现模拟登录的实现实例 为了用手机登录校网时不用一遍一遍的输入账号密码,于是决定用爬虫抓取学校登录界面,然后模拟填写本次保存的账号、密码,模拟点击登录按钮。实现过程折腾好几个。 一开始选择的是htmlunit解析登录界面htm

  • 有人能告诉我原因或上面代码的更好替代方案吗?