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

如何使用java/spring编写ddmmYYYY验证的单元测试?

麻学博
2023-03-14
    Accepting DateFormat : 01042021

>

  • 列表项

    Incorrect DateFormat : 9901042021 or 0104202199 etc.
    

    我的日期验证代码块:

        @Value("${sms.date.format:ddMMyyyy}")
        private String DATE_FORMAT;
    
        public void validateDates(ReportRequest request){
    
            DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
    
            if(StringUtils.isNotBlank(request.getStartDate())){
                try{
                    dateFormat.parse(request.getStartDate());
                }catch (Exception e){
                    throw new InvalidInputException("Invalid start date format, must be as : " +DATE_FORMAT);
                }
            } else {
                throw new InvalidInputException("Contract start date is empty");
    
            }
    
            if(StringUtils.isNotBlank(request.getEndDate())){
                try{
                    dateFormat.parse(request.getEndDate());
                }catch (Exception e){
                    throw new InvalidInputException("Invalid end date format, must be as : " +DATE_FORMAT);
                }
            } else {
                throw new InvalidInputException("Contract end date is empty");
    
            }
        }
    

    我的单元测试:因为dateformat为空,所以第一行出现错误。我如何修复它?

    @Value("${sms.date.format:ddMMyyyy}")
    private String DATE_FORMAT;
    
    public void testValidateDates() {
    
    
            DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
            ReportRequest reportRequest = new ReportRequest();
            ReportRequest.setStartDate("0104202199");
            ReportRequestValidator reportRequestValidator = new ReportRequestValidator();
            ReportRequestValidator.validateDates(reportRequest);
            assertEquals("Invalid start date format, must be as : ","0104202199");
    
        }
    

    我应该如何使用assert函数,条件应该是什么?

  • 共有1个答案

    梁鸣
    2023-03-14

    问题是DATE_FORMAT没有注入到您的测试类中,因此您会得到一个NullPointerExctive。

    解决这个问题的两种方法

    >

  • 使用@SpringBootTest。检查一下:https://www.baeldung.com/spring-tests-override-properties

    一种更干净的方法:没有任何Spring注释。这使得测试代码更加简单。只需重构代码:

    // in your production code:
    public class ReportRequestValidator {
    
      private String DATE_FORMAT;
    
      // package-private constructor for test 
      ReportRequestValidator (@Value("${sms.date.format:ddMMyyyy}") String dateFormat) {
         DATE_FORMAT = dateFormat;
      }
    
      // business logic...
     
    }
    
    
    // in your test code
    
    @Rule
    public ExpectedException expectedEx;
    
    @Before
    public void init() {
      expectedEx = ExpectedException.none();
    }
    
    @Test
    public void testValidateDates() {
        String DATE_FORMAT = "PROVIDE_DATE_FORMAT_STRING_BY_YOURSELF";
        ReportRequest reportRequest = new ReportRequest();
        ReportRequest.setStartDate("0104202199");
        ReportRequestValidator reportRequestValidator = new ReportRequestValidator(DATE_FORMAT);    // inject DATE_FORMAT into validator
    
        ReportRequestValidator.validateDates(reportRequest);
    
        expectedEx.expect(InvalidInputException.class);
        expectedEx.expectMessage("Invalid start date format, must be as : 0104202199");
    }
    

  •  类似资料:
    • 问题内容: 我有一个Java课。如何进行 单元测试? 就我而言,我有课做一个二进制和。它需要两个数组,将它们求和,然后返回一个新的二进制数组。 问题答案: 使用正确的输入定义正常情况下的预期和期望输出。 现在,通过声明一个类来实现测试,将其命名为任何东西(通常是类似TestAddingModule之类的东西),并向其添加testAdd方法(即,类似于下面的方法): 编写一个方法,并在其上方添加@T

    • 在尝试连接数据库并获得连接尝试失败时,所有这些测试用例都失败了。和异常,因为它没有获取信息。 我对spring boot framework和JUnit几乎是新手,希望帮助我理解这一点以及编写单元测试用例的正确方法。

    • 试图弄清楚我是否可以使用spring kafka和spring kafka测试为@KafkaListener编写单元测试。 我的听众课。 我的测试类别: 我的测试配置类: 有什么简单的方法可以做到这一点吗? 或者我应该以其他方式测试@KafkaListener?在单元测试中,如何确保在Kafka中收到新消息时调用@KafkaListener。

    • 问题内容: 我正在使用python(2.7)程序,该程序会产生许多不同的matplotlib图(数据不是随机的)。我愿意实施一些测试(使用unittest)以确保生成的数字正确。例如,我将期望的图形(数据或图像)存储在某个位置,运行我的函数并将结果与​​参考进行比较。有没有办法做到这一点 ? 问题答案: 以我的经验,图像比较测试最终带来的麻烦多于其应有的价值。如果要跨多个系统(例如TravisCI

    • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担