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函数,条件应该是什么?
问题是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 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担