Как бы я сделал юнит-тест для дня месяца и дня недели - PullRequest
0 голосов
/ 30 сентября 2018

Я хочу проверить как день недели, так и день месяца для календаря 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 голосов
/ 01 октября 2018
  • Никогда не используйте ужасный класс 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, например America/Montreal, Africa/Casablanca или Pacific/Auckland.Никогда не используйте 3-4-буквенное сокращение, например EST или IST, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).

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 Framework встроен в Java 8 и более поздние версии.Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздних версий - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и еще .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...