Mockito/Spy 不起作用,使用类 dao 执行原始函数

Mockito/Spy not working, executing the original function with class dao

提问人:alexis 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26

问:

我是使用 Mockito 进行单元测试的新手,我尝试了几种方法,但它不起作用,我无法模拟方法的响应,我总是运行真实方法,

我在方法中创建对象,因为我没有使用 spring boot,而是使用另一个无服务器框架,因为我无法配置 api 以获得更好的依赖注入管理。

this is my unit test

@ExtendWith(MockitoExtension.class)
public class RequestBalancePersonServiceTest {

    @Mock
    private RequestBalancePersonService service;
    private DTORequestBalance dtoRequestBalance;
    private DTOIdAndNamesByNumberCellphone dtoIdAndNamesByNumberCellphone;
    private RequestBalancePersonEntity requestBalancePersonEntity;
    @Mock
    private CustomerWalledDao customerWalledDao;

    @Spy
    private RequestBalancePersonDao requestBalancePersonDao;
    @Spy
    private ReceivesBalancePersonService receivesBalancePersonService;


    private Intermedia intermedia;

    @BeforeEach
    void setUp() {
        intermedia = new Intermedia(service);

        customerWalledDao = Mockito.spy(CustomerWalledDao.class);
        dtoRequestBalance = new DTORequestBalance();
        dtoRequestBalance.setClient_account_Requesting_Balance("+573138356431");
        dtoRequestBalance.setBalance(1000);
        dtoRequestBalance.setCustomer_account_whom_balance_requested("+573134688960");
        dtoRequestBalance.setTransaction_date(null);

        dtoIdAndNamesByNumberCellphone = new DTOIdAndNamesByNumberCellphone();
        dtoIdAndNamesByNumberCellphone.setCustomerId(21654654l);
        dtoIdAndNamesByNumberCellphone.setFirstName("Alexis");
        dtoIdAndNamesByNumberCellphone.setFirstSurname("Suarez");

        requestBalancePersonEntity = new RequestBalancePersonEntity();
        requestBalancePersonEntity.setRequestid(16624165l);
        requestBalancePersonEntity.setStatusId(3);
        requestBalancePersonEntity.setRequestchecked(false);
        requestBalancePersonEntity.setCustomerId(21654654l);
       // doReturn(dtoIdAndNamesByNumberCellphone).when(customerWalledDao).getIdAndNamesByNumberCellphone("+573138356431");
        //doReturn(1).when(requestBalancePersonDao).registerRequestBalance(requestBalancePersonEntity);
        //doReturn(1).when(receivesBalancePersonService).buildReceivesBalancePerson(requestBalancePersonEntity,dtoRequestBalance);
        // doReturn(dtoIdAndNamesByNumberCellphone).when(customerWalledDao).getIdAndNamesByNumberCellphone("+573138356431");
        //doReturn(1).when(requestBalancePersonDao).registerRequestBalance(requestBalancePersonEntity);
    }
    

    @Test
    void buildRequestBalance2() throws Exception{
            doReturn(dtoIdAndNamesByNumberCellphone).when(customerWalledDao).getIdAndNamesByNumberCellphone(nullable(String.class));
            doReturn(1).when(requestBalancePersonDao).registerRequestBalance(nullable(RequestBalancePersonEntity.class));
            doReturn(1).when(receivesBalancePersonService).buildReceivesBalancePerson(nullable(RequestBalancePersonEntity.class),nullable(DTORequestBalance.class));
            int result = service.buildRequestBalance(dtoRequestBalance);
            assertEquals(1, result);
    }

    @Test
    void buildRequestBalance3() throws Exception{
        doReturn(dtoIdAndNamesByNumberCellphone).when(customerWalledDao).getIdAndNamesByNumberCellphone("+573138356431");
        doReturn(1).when(requestBalancePersonDao).registerRequestBalance(requestBalancePersonEntity);
        doReturn(1).when(receivesBalancePersonService).buildReceivesBalancePerson(requestBalancePersonEntity,dtoRequestBalance);
        int result = service.buildRequestBalance(dtoRequestBalance);
        assertEquals(1, result);
    }
}

this is my service

public class RequestBalancePersonService {

    private final Logger logger = Logger.getLogger(this.getClass());


    public int buildRequestBalance(DTORequestBalance requestBalance){
        CustomerWalledDao customerWalledDao = new CustomerWalledDao();
        RequestBalancePersonDao requestBalancePersonDao = new RequestBalancePersonDao();
        int registrationCompleted = 0;
        RequestBalancePersonEntity requestBalancePerson = new RequestBalancePersonEntity();
        ReceivesBalancePersonService receivesBalancePersonService = new ReceivesBalancePersonService();
        try{

            DTOIdAndNamesByNumberCellphone resultDataCustomer = customerWalledDao.getIdAndNamesByNumberCellphone(requestBalance.getClient_account_Requesting_Balance());
            java.util.Date date = new java.util.Date();
            Long requestId = UniqueIDUtils.generateUniqueId(date);
            Timestamp transactionDate = new Timestamp(date.getTime());
            TimeZone.setDefault(TimeZone.getTimeZone("America/Bogota"));

            requestBalancePerson.setRequestid(requestId);
            requestBalancePerson.setStatusId(3);
            requestBalancePerson.setRequestchecked(false);
            requestBalancePerson.setCustomerId(resultDataCustomer.getCustomerId());

            StringBuilder message = new StringBuilder();
            message.append(resultDataCustomer.getFirstName())
                    .append(" ").append(resultDataCustomer.getFirstSurname()).append(" ");
            message.append(System.getenv("requestMessages")).append(" ").append(requestBalance.getBalance());
            requestBalancePerson.setRequestmessages(message.toString());

            requestBalancePerson.setBalance(requestBalance.getBalance());
            requestBalancePerson.setRequestdate(transactionDate);
            int resultRegisterRequestBalance = requestBalancePersonDao.registerRequestBalance(requestBalancePerson);
            int receivesRegisterBalancePerson = receivesBalancePersonService.buildReceivesBalancePerson(requestBalancePerson,requestBalance);
            if (resultRegisterRequestBalance == 1 && receivesRegisterBalancePerson == 1){
                return registrationCompleted = 1;
            }
            if (resultRegisterRequestBalance == 1 && receivesRegisterBalancePerson == 0){
                logger.error("Error receivesBalancePerson");
            }

            if (resultRegisterRequestBalance == 0 && receivesRegisterBalancePerson == 1){
                logger.error("Error RequestBalancePerson");
            }

            if (resultRegisterRequestBalance == 0 && receivesRegisterBalancePerson == 0){
                logger.error("Error RequestBalancePerson");
                logger.error("Error receivesBalancePerson");
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("Error al construir request balance: "+e.getMessage());
        }
        return registrationCompleted;
    }

我正在阅读此出版物,如果这是真的,我将无法测试我的服务,因为声纳不会显示覆盖范围。Mockito/Spy 不工作,执行原始功能

Java 单元测试 aws-lambda mockito

评论

0赞 knittl 11/17/2023
这回答了你的问题吗?为什么在执行单元测试时没有调用我的模拟方法?,特别是(错误)使用@InjectMocks部分 - 你已经注释了你的字段,如果你在设置方法中重新定义它们,原始引用就会丢失

答: 暂无答案