类使用Int输入和布尔输出测试日期是否有效,以及如何测试(java)

类使用Int输入和布尔输出测试日期是否有效,以及如何测试(java),java,testing,calendar,Java,Testing,Calendar,我有一个类的赋值,在这个类中,我必须创建一个类(称为FunWithCalendars),该类接受3个int值(月、日和年),并使用1个布尔方法(isValid)检查总日期是否有效,该方法使用3个其他辅助方法(isLeapYear、isValidMonth、isValidDay)来确定给定的日期和月份是否有效。现在我想在Eclipse中测试我的文件。 到目前为止,我已经学会了用这段代码测试类/方法(我是个新手,所以这是我知道的唯一方法): 然而,当我必须输入未在方法中定义的int值时,我不理解如何

我有一个类的赋值,在这个类中,我必须创建一个类(称为FunWithCalendars),该类接受3个int值(月、日和年),并使用1个布尔方法(isValid)检查总日期是否有效,该方法使用3个其他辅助方法(isLeapYear、isValidMonth、isValidDay)来确定给定的日期和月份是否有效。现在我想在Eclipse中测试我的文件。 到目前为止,我已经学会了用这段代码测试类/方法(我是个新手,所以这是我知道的唯一方法):

然而,当我必须输入未在方法中定义的int值时,我不理解如何测试布尔方法的true或false。上面代码中的错误位于“newfunWithCalendars();”和“(test.FunWithCalendars());”。 以下是我的主要代码:

public class FunWithCalendars
{
    private int month, day, year;
    
    public FunWithCalendars( int m, int d, int y )
    {
        month = m;
        day = d;
        year = y;
    }
    
     public boolean isValid ( boolean isValidMonth, boolean isValidDay ) 
     { 
         if ( isValidMonth && isValidDay ) 
         {
             return true;
         }
         else 
         {
             return false;
         }
        
     }
                 
          
    
     public boolean isLeapYear (int year) 
     {
        
        if ( (year / 400) == 0 )  
        {
            return true;
        }
        else if ( ((year / 4) == 0) && ((year/100) !=0))
        {
            return true;
        }
        else 
        {
            return false;
        }
     }
    
     public boolean isValidMonth ( int month )  
     {
        if ( month >= 1 && month <= 12 ) 
        {
            return true;
        }
        else 
        {
            return false;
        }
     }
    
     public boolean isValidDay  ( int month, int day, int year, boolean isLeapYear ) 
     {
         if ( (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && ((day<=31) && (day>=1)) ) 
         {
             return true;
         }
         else if ( (month == 4 || month == 6 || month == 9 || month == 11) && ((day<=30) && (day>=1)) ) 
         {
             return true;
         }
         else if ( (month == 2) && ( isLeapYear = true) && ((day<=29) && (day>=1)) ) 
         {
             return true;
         }
         else if ( (month == 2) && ( isLeapYear = false) && ((day<=28) && (day>=1)) ) 
         {
             return true;
         }
         else 
         {
             return false;
         }
     }
     
}
     

}
}
带有日历的公共类功能
{
私人int月、日、年;
公共日历功能(整数m、整数d、整数y)
{
月=m;
d=d;
年份=y;
}
公共布尔值isValid(布尔值isValidMonth,布尔值isValidDay)
{ 
如果(isValidMonth&&isValidDay)
{
返回true;
}
其他的
{
返回false;
}
}
公共财政年度(整年)
{
如果((年/400)==0)
{
返回true;
}
如果((第/4年)==0)和((第/100年)!=0))发生其他情况
{
返回true;
}
其他的
{
返回false;
}
}
公共布尔值isValidMonth(整数月)
{

如果(月>=1&&month让我们以第一次测试为例:

测试:

2010年7月20日有效

因此,在您的驱动程序类/测试类中,构造一个表示2010年7月20日的
FunWithCalendars
对象。构造函数为此使用三个参数。接下来调用它的
isValid
方法。我相信这个想法是您不需要再次传递相同的参数。您的
isValid
方法使用两个
boolean
arguments。相反,我认为它不应该接受任何参数,它本身调用两个helper方法来传递
FunWithCalendars
对象中已经存在的值。因此,在让驱动程序类正常工作之前,我相信您必须在这一点上修正您的设计

调用
isValid()
工作后,将返回值存储到一个变量中。将其与预期值(本例中为
true
)进行比较。如果它们相等,则打印测试通过的语句。如果它们不相等,则打印包含预期值和观察值的语句

对其他测试也要这样做。不过,不要复制粘贴代码。而是将其包装在一个方法中,并为每个测试用例调用该方法,将该特定测试所需的数据作为参数传递。记住将预期结果作为参数包含,以便该方法可以进行比较

编辑:

…我的困惑在于如何构造一个对象(一般来说 特别是FunWithCalendars),如何调用isValid方法和 让它不带任何参数,如何让isValid方法调用 传递中的值的两个助手方法 FunWIthCalendars对象

这是基本的东西,我不认为堆栈溢出是一个教基本东西的好地方。让我们试试看,只是请把你的期望设定得低一点

如何构造对象:您已经在驱动程序类中使用
new
操作符执行此操作:

    FunWithCalendars test = new FunWithCalendars () ;
只有您需要将正确的参数传递给构造函数。您的构造函数需要三个
int
参数,因此它需要类似于:

    FunWithCalendars test = new FunWithCalendars(7, 20, 2020);
如何调用
isValid
方法并使其不带任何参数,在上行之后:

    boolean calculatedValidity = test.isValid();
它存储从
isValid()
false
true
返回的值)进入一个新创建的
boolean
变量,我将其命名为
calculatedValidity
。从那里我们可以检查它是否具有预期值,根据它采取行动和/或打印它。最简单的方法是打印它,例如:

    System.out.println("Is 7/20/2020 valid? " + calculatedValidity);
不带参数的调用要求该方法没有任何参数:

public boolean isValid () 
{ 
如何让
isValid()
调用两个helper方法:您可以简单地编写方法调用,而不必提及以前的参数。再次记住传递正确的参数:

    if (isValidMonth(month) && isValidDay(month, day, year, isLeapYear(year)) ) 
在这里的方法调用中,我使用
FunWithCalendars
对象的实例变量(字段)作为参数。这导致该方法使用我们通过构造函数输入的数字,并使用三个helper方法

我已使用上述更改运行了您的代码。我的打印语句打印了预期的:


PS我故意不说你代码中可能存在的错误。让测试告诉你是否有错误对你来说更好。

这是一个很好的作业。它足够复杂,可以帮助你学习材料。我同意,作为一个初学者,他仍然在学习语法、方法和对象以及h一般来说,如何构造类和方法是非常令人困惑的。我非常感谢您的帮助,但很抱歉,我很困惑。我的困惑在于如何构造对象(一般来说,尤其是日历),如何调用isValid方法并使其不带任何参数,如何让isValid方法调用传递FunWIthCalendars对象中的值的两个帮助器方法。@Ethaa请在答案底部附近查看我的编辑。感谢编辑解释!!这使我意识到我需要重新学习基础知识(对象、方法、参数、参数等),也让我意识到
    if (isValidMonth(month) && isValidDay(month, day, year, isLeapYear(year)) ) 
Is 7/20/2020 valid? true