【问题标题】:Test Class with non static variable error message带有非静态变量错误消息的测试类
【发布时间】:2019-05-16 13:12:02
【问题描述】:

我正在下面创建一个 testMethod() 类来测试 Main 类中的方法。当我执行程序时,它给出了一个编译器错误:Java 非静态变量不能从非静态上下文中引用。该项目需要构建 2 个不同的类。第一个类必须包含 3 个方法,其中第三个调用方法 1 和 2。第二个类用于测试主类中的方法。

我是 Java 新手,正在努力找出导致此错误的原因。

谢谢

导入 java.util.Scanner;

公共类主{

 char reply;
 int input;

     public void gradeModule(int mark) {
    mark = input;
    if (mark >= 70) {
        System.out.println("Excellent");
    } else if (mark >= 60 && mark <= 69) {
        System.out.println("Good");
    } else if (mark >= 50 && mark <= 59) {
        System.out.println("Satisfactory");
    } else if (mark >= 40 && mark <= 49) {
        System.out.println("Compensatable fail");
    } else {
        System.out.println("Outright fail");
    }

}

 public int getValidModuleMark() {

    Scanner keyboard = new Scanner(System.in);

    while (input > 100 || input < 0)
    {
        System.out.println("Please enter a valid mark between 0 - 100:  ");
        input = keyboard.nextInt();
    }

    return input;

}

public void startModuleGrading() {

     System.out.println("*********** Module Grading Program *********");


     do {

         getValidModuleMark();

         gradeModule(input);


         System.out.println("Would you like to continue grading (Y/N)? ");
         Scanner keyboard = new Scanner(System.in);
         reply = keyboard.next().charAt(0);

         if (reply == 'N' || reply == 'n') {
             System.out.println("Thank you!");
         }


     } while (reply == 'Y' || reply == 'y');


}

}

类测试方法{

Main test = new Main ();

public static void main(String [] args){

    test.startmoduleGrading();

}

}

【问题讨论】:

  • 你的班级之前有没有做过测试,例如JUnit?你能复制前面的例子吗?这种情况的典型答案是只构建另一个类并让它针对原始类运行测试(测试类A,创建类B并让B.main()实例化一个A类型的对象并测试所有它的功能)。
  • 要么使用测试框架(junit、testng),要么只是通过执行方法调用并将输出与预期返回值进行比较(这只是 assertEquals 的另一种实现)的简化方法跨度>

标签: java class methods static


【解决方案1】:

回答原始问题:

根据我在这里阅读的内容,您的老师可能想要这样一堂课:

class X
{
    public int methodOne(int i)
    {
         return i++;
    }

    public int methodTwo(int i)
    {
         return i--;
    }

    public int methodThree(int i)
    {
         return methodOne(i) + methodTwo(i);
    }
}

然后你会有另一个类进行测试:

class Tester
{
    public static void main(String[] args)
    {
         X test = new X();
         System.out.println(test.methodOne(3));
         System.out.println(test.methodTwo(3));
         System.out.println(test.methodThree(3));
    }
}

这表明您创建了类并且方法有效。

回答更新后的问题:

在您的代码中,您已声明 Main test = new Main (); 在您的主要方法之外,这确实是一个静态方法。将声明移到方法内部,一切都应该正常工作。因此,您的程序应如下所示:

public static void main(String [] args)
{
    Main test = new Main ();
    test.startmoduleGrading();

}

【讨论】:

  • 对我来说,测试意味着你对这两个函数有一些确定的行为,你会想要测试它。恕我直言,打印不足以进行测试。
  • 我同意,但我认为在这个问题的情况下,他可能是一个全新的 CS 学生,之前没有参加过多个课程。我只是想做一个非常简单的例子来展示类交互的样子。
  • 如果测试器类不仅打印函数调用的结果,而且根据程序员的预期结果验证它们,它会更有效(就像 JUnit 类一样)。 assertEquals(4, test.methodOne(3));
  • 谢谢。除了,当我运行它时,我收到以下错误消息:java: non-static variable cannot be referenced from a static context.
  • @dryre 您是否在程序流程中将任何内容声明为静态。如果是这样,那么您将什么声明为静态的?
猜你喜欢
  • 2012-10-16
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
相关资源
最近更新 更多