【问题标题】:How to unit test to check the format of a datetime?如何进行单元测试以检查日期时间的格式?
【发布时间】:2026-01-15 05:40:01
【问题描述】:

我的 android 应用程序提供了选择日期和时间的选项,然后将其格式化为格式为“MM/DD/YYYY HH:mm”的字符串。然后将该字符串存储在数据库中。

我正在尝试创建一个单元测试来测试日期和时间是否以正确的格式存储,但我正在努力寻找正确的方法。这个我试过了

@Test
public void testDateTimeFormat() {
    DateActivity dateActivity = new DateActivity();
    Calendar currentDateTime = Calendar.getInstance();
    Assert.assertEquals( dateActivity.showDateTime(currentDateTime), "MM/DD/YYYY HH:mm");

方法 showDateTime 输入当前日期和时间,它应该以正确的格式返回它。我尝试使用 assert equals 比较这两者以表明它的格式正确,但似乎没有正确比较它,它只是说它们不一样,它没有检测到 MM/ 的格式DD/YYYY HH:mm。不确定如何正确构建此测试

【问题讨论】:

  • 你在做仪器测试吗? DateActivity 正在扩展 Appcompat,对吗?
  • @notTdar 不,我正在尝试设置单元测试。我是这样测试的新手,所以我可能做错了。是的,DateActivity 正在扩展 Appcompat
  • 好吧,没有instrumentation测试,你不能使用activity/fragment或views的实例,你只能测试不扩展任何android相关组件的Java类,
  • @notTdar 谢谢你,我很感激。我会考虑寻找另一种解决方案
  • 祝你好运,“robolectric”你可以探索它。

标签: java android unit-testing


【解决方案1】:

我希望这对你有用。

在您的活动中创建以下方法。

public boolean checkDateFormat(String s) {
        SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/YYYY HH:MM");
        Date date1 = new Date(s);
        s = formatter.format(date1);
        Date date = new Date();

        String strDate = formatter.format(date);
        System.out.println(strDate);
        System.out.println(s);

        if (s.equals(strDate)) {
            return true;
        } else {
            return false;
        }
    }

单元测试代码如下

 @Test
    public void isDateFormat() throws Exception {
        assertEquals(new MainActivity().checkDateFormat("27/05/2019 10:06"),true);
    }

如果您提供的字符串匹配,则测试将通过,否则将失败。

assertEquals(new MainActivity().checkDateFormat("28/05/2019 10:06"),true);

测试:失败

assertEquals(new MainActivity().checkDateFormat("05/27/2019 10:06"),true);

测试:真

【讨论】: