Gitlab ci 不会运行我的脚本,因为它需要数据库连接

问题描述 投票:0回答:1

我正在尝试在 gitlab 中运行单元测试,测试在我的本地环境中正常运行,但我在 Gitlab 中遇到以下错误。

我猜测 gitlab 无法访问数据库,这就是脚本无法将文件保存到数据库的原因。

这是我在 Gitlab 中收到的错误消息

Error message:
[ERROR] Failures: 
[ERROR]   AnnualReturnServiceTest.testSave:102 
Wanted but not invoked:
annualReturnRepository.save(
    <any com.riskanalysisexpertsystem.scanpro.model.company.AnnualReturn>
);
-> at com.test.unit.AnnualReturnServiceTest.testSave(AnnualReturnServiceTest.java:102)
Actually, there were zero interactions with this mock.

这是 AnnualReturnServiceTest.testSave 的脚本

    public void testSave() {
        logger.info("Mock file and file details");
        
        pdftoImageConverterUtility.convertFile(SOURCE_FILE_PATH, SOURCE_DESTINATION_PATH);
        File file = new File(SOURCE_DESTINATION_PATH);
        String fileDetails = "Annual Return Form\n"
                + "Company Name: Apple Inc.\n"
                + "\n"
                + "TIN: 3243243\n"
                + "\n"
                + "Company Address: 32432 MaryDale Drive., Ghana 234324\n"
                + "Company Registration Number: 432432\n"
                + "Fiscal Year Start Date: 2022-01\n"
                + "\n"
                + "Fiscal Year End Date: 2022-12\n"
                + "\n"
                + "Total Revenue: 342432\n"
                + "\n"
                + "Total Expenses: 3434\n"
                + "\n"
                + "Taxable Income: 34333\n"
                + "\n"
                + "Tax Paid: 3243";
        
        logger.info("Mock the behaviour of OCR utility");
        when(ocrUtility.performOCR(file)).thenReturn(fileDetails);
        
        logger.info("Call the save method");
        annualReturnService.save(file);
        
        logger.info("Verify that parseAnnualReturnDetails is not null");
        try {
            assertNotNull(annualReturnService.parseAnnualReturnDetails(fileDetails));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        logger.info("Verify the annualReturnRepository's save method is called");
        verify(annualReturnRepository, times(1)).save(any(AnnualReturn.class));
    }

.gitlab-ci

test:
  stage: test
  script:
    - mvn test -Dtest=com.test.unit.AnnualReturnServiceTest
  allow_failure: true
  dependencies:
    - build
  artifacts:
    paths: 
      - target/surefire-reports
    expire_in: "30 days"
java gitlab gitlab-ci crud
1个回答
0
投票

来自 gitlab 的错误看起来像是 Mockito 验证错误,与数据库访问无关。

造成这种情况有两个明显的原因。

  1. 被测服务中存在逻辑,当给定测试模拟条件时,可以避免年度ReturnRepository.save() 调用。
  2. 您的模拟未正确注入到服务中。

也许您可以提供测试定义和被测服务中的一些代码。

PS,如果您只想验证单个方法调用,可以跳过

times(1)

verify(annualReturnRepository).save(any(AnnualReturn.class));
© www.soinside.com 2019 - 2024. All rights reserved.