Java 坚持测试一种方法

Java 坚持测试一种方法,java,junit,Java,Junit,我正在用word做一些表格测试,所有的JUnit都已经完成了,但是我在测试一个方法时遇到了困难——因为我是这个项目中的测试人员,而不是程序员,我正在努力理解什么是真正正确的或不正确的 public GregorianCalendar calcDeparture(String date, String time) { String[] calDate = new String[3]; String[] calTime = new String[2];

我正在用word做一些表格测试,所有的JUnit都已经完成了,但是我在测试一个方法时遇到了困难——因为我是这个项目中的测试人员,而不是程序员,我正在努力理解什么是真正正确的或不正确的

   public GregorianCalendar calcDeparture(String date, String time) {
        String[] calDate = new String[3];
        String[] calTime = new String[2];
        calDate[0] = (date.substring(0, 2)); //Dat
        calDate[1] = date.substring(2, 5); //Month
        calDate[2] = "20" + date.substring(5, 7); //Year
        calTime = time.split(":");

        //Adds the year, month and day and hour and minute from the above splited arrays
        int year = Integer.parseInt(calDate[2]);
        int month = monthToInt(calDate[1]);
        int day = Integer.parseInt(calDate[0]);
        int hour = Integer.parseInt(calTime[0]);
        int minute = Integer.parseInt(calTime[1]);

        GregorianCalendar newDeparture = new GregorianCalendar(year, month, day, hour, minute, 0);
        return newDeparture;
    }
这就是我正在测试的方法。如果我将“01AUG07”14:40的值传递给它,我会得到一个格里高利日历,但我不知道里面的值是否正确,所以我不能勾选“传递”或“失败”框。我在BlueJ对象检查器中得到的是一堆非常长的数字:D

我能得到一些帮助吗


谢谢

为什么不能使用标准的getter来检查各个字段,如下所示:

Calendar cal = calcDeparture("01AUG07", "14:40");
if (cal.get(Calendar.YEAR) != 2007) { ... }

为什么不能使用标准getter来检查各个字段,如下所示:

Calendar cal = calcDeparture("01AUG07", "14:40");
if (cal.get(Calendar.YEAR) != 2007) { ... }
考虑使用IDE,而不是教育软件
  • 这个方法写得很糟糕——使用严格格式的字符串处理日期是错误的
  • Calendar
    (它是
    gregoriacalendar
    的超类型)有
    get
    方法,您可以像这样使用:

    Calendar calendar = calcDeparture(yourDate, yourTime);
    int day = calendar.get(Calendar.DAY_OF_YEAR);
    int moth = calendar.get(Calendar.MONTH); //this is 0 based;
    
    等等

  • 考虑使用IDE,而不是教育软件
  • 这个方法写得很糟糕——使用严格格式的字符串处理日期是错误的
  • Calendar
    (它是
    gregoriacalendar
    的超类型)有
    get
    方法,您可以像这样使用:

    Calendar calendar = calcDeparture(yourDate, yourTime);
    int day = calendar.get(Calendar.DAY_OF_YEAR);
    int moth = calendar.get(Calendar.MONTH); //this is 0 based;
    
    等等


  • 我建议同时使用
    SimpleDataFormat()
    检查日历的所有相关值,如下所示:

    SimpleDateFormat f = new SimpleDateFormat ("yyyy-MM-dd HH:mm");
    String s = f.format (calcDeparture(yourDate, yourTime));
    assertEquals ("2007-08-01 14:40", s);
    

    现在用奇数日期(如31.12.2999、8月45日、2001年2月29日等)调用您的方法,查看您得到了什么以及如何处理错误。

    我建议同时使用
    SimpleDateFormat()
    检查日历的所有相关值,如下所示:

    SimpleDateFormat f = new SimpleDateFormat ("yyyy-MM-dd HH:mm");
    String s = f.format (calcDeparture(yourDate, yourTime));
    assertEquals ("2007-08-01 14:40", s);
    

    现在用奇数日期(如31.12.2999、8月45日、2001年2月29日等)调用您的方法,看看您得到了什么以及应该如何处理错误。

    我的印象是,您实际的问题是“如何检查GregorianCalendar实例代表的日期/时间?”?“GregorianCalendar的javadoc对此进行了详尽的描述。为什么该方法被称为calcDeparture?它只解析日期字符串。实际上,根本不需要这个方法。您正在测试它……我得到的印象是,您的实际问题是“如何检查GregorianCalendar实例表示的日期/时间?”GregorianCalendar的javadoc对此进行了详细描述。为什么称为calcDeparture的方法?它只解析日期字符串。实际上,根本不需要这个方法。您正在测试它…@OP:请告知原始开发人员SimpleDataFormat类及其用法。他/她可能会在他/她这个月的工资中给你一份不错的薪水。如果没有,那么您至少可以喝杯啤酒。@OP:您与原始开发人员共享此测试代码,并且此方法很可能不再存在供您测试。@OP:请告知原始开发人员SimpleDataFormat类及其用法。他/她可能会在他/她这个月的工资中给你一份不错的薪水。如果没有,那么您肯定至少可以喝杯啤酒。@OP:您与原始开发人员共享此测试代码,并且此方法很可能不再存在供您测试。