我将在每月的某天和一周的某天进行单元测试

时间:2018-09-30 20:53:14

标签: java eclipse unit-testing

我想同时测试星期几和月份中的Java日历。在过去的几个小时中,我一直在尝试找出测试课程。 我想输入星期几的值,并测试星期几是否会按预期输出。任何帮助将不胜感激。 我想我需要每天,每月和每年喂食,但我不知道该如何喂食。 我需要在此编码练习中使用日历。

到目前为止我的代码

import java.util.Calendar;
import java.util.Scanner;

public class dayOfWeek {


public static void main(String[] args) {    
    Calendar c = Calendar.getInstance(); 
    Scanner input = new Scanner (System.in);


    //Input Day
    System.out.println("Enter the Day (last two numbers) in number format:");
    int day= input.nextInt( );

    //Input Month
    System.out.println("Enter the Month (last two numbers) in number format:");
    int month= input.nextInt( );

    //Input Year
    System.out.println("Enter the Year (last two numbers) in number format:");
    int year= input.nextInt( );


    c.set(year, month, day);

    //Display the day
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

    // Display Day of month
    int dayOfMonth = c.get(Calendar.DAY_OF_MONTH);

    //Print date in format
    System.out.println(String.format("%d/%d/%d",day,month,year));


    //if statement to print out day of week
    if (dayOfWeek == Calendar.SUNDAY) {
        System.out.println("Sunday");
    }
    else if (dayOfWeek == Calendar.MONDAY) {
        System.out.println("Monday");
    }
    else if (dayOfWeek == Calendar.TUESDAY) {
            System.out.println("Tuesday");
    }
    else if (dayOfWeek == Calendar.WEDNESDAY) {
                System.out.println("Wednesday");
    }
    else if (dayOfWeek == Calendar.THURSDAY) {
        System.out.println("Thursday");
    }
    else if (dayOfWeek == Calendar.FRIDAY) {
        System.out.println("Friday");
    }
    else if (dayOfWeek == Calendar.SATURDAY) {
        System.out.println("Saturday");






    //close Scanner in 
    input.close( );

   }

}

public static Object dayOfWeek(int i) {
    // TODO Auto-generated method stub
    return null;
}
}

1 个答案:

答案 0 :(得分:0)

  • 从不使用可怕的Calendar类。
  • 现代方法使用 java.time 类。

LocalDate

将您的三个整数解析为日期。如果输入无效,则捕获抛出的异常(如果不存在这样的日期)。将LocalDate用作无日期,无时区的仅日期值。

try {
    LocalDate ld = LocalDate.of( y , m , d ) ;
} catch ( DateTimeException e ) {
    … handle invalid input …
}

DayOfWeek

使用DayOfWeek之类的DayOfWeek.MONDAY枚举传递您期望的星期几。

DayOfWeek dow = DayOfWeek.MONDAY ;  // Passed into your test.
if( ld.getDayOfWeek().equals( dow ) ) { … }

转换

如果必须与尚未更新为 java.time 的旧代码进行互操作,则可以来回转换。调用添加到旧类中的新转换方法。

如果您需要Calendar,更具体地说,是GregorianCalendar,我们需要一个时间和一个时区。

您可能希望使用当天的第一时间。永远不要假设一天从00:00:00开始。诸如夏令时(DST)之类的异常表示一天可能在另一个时间(例如01:00:00)开始。让 java.time 确定第一时刻。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用3-4个字母的缩写,例如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;

立即转换。

Calendar c = GregorianCalendar.from( zdt ) ;  // Convert from modern class to legacy class. Do so only if absolutely required; otherwise, avoid the legacy date-time classes like the Plague. 

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore