提问人:alexis 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26
Mockito/Spy 不起作用,使用类 dao 执行原始函数
Mockito/Spy not working, executing the original function with class dao
问:
我是使用 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 不工作,执行原始功能
答: 暂无答案
评论