Java 为什么IntelliJ在我尝试运行或调试任何东西时都会切换到一个特定的类?
我正在IntelliJ的一个项目中工作,我需要在一个名为Lab7的类中创建三个方法,然后在一个名为Lab7Test的单独类中测试所有三个方法。Lab7的代码是我写的,但是测试课是我们的教授给我们的,因为我们还没有学习junit,测试似乎就是这样运行的。这是Lab7:Java 为什么IntelliJ在我尝试运行或调试任何东西时都会切换到一个特定的类?,java,intellij-idea,junit,Java,Intellij Idea,Junit,我正在IntelliJ的一个项目中工作,我需要在一个名为Lab7的类中创建三个方法,然后在一个名为Lab7Test的单独类中测试所有三个方法。Lab7的代码是我写的,但是测试课是我们的教授给我们的,因为我们还没有学习junit,测试似乎就是这样运行的。这是Lab7: package Lab7; import java.util.Scanner; public class Lab7 { public static void main(String[] args){ //
package Lab7;
import java.util.Scanner;
public class Lab7 {
public static void main(String[] args){
// variable declarations for part 1
String title;
String firstName;
String lastName;
Scanner in = new Scanner(System.in);
// prompt for input for part 1
System.out.print("Enter a title:");
title = in.next();
System.out.print("Enter your first name:");
firstName = in.next();
System.out.print("Enter a your last name:");
lastName = in.next();
// call the method for part 1
greeting(title, firstName, lastName);
// variable declarations for part 2
int number1;
int number2;
// user prompts for part 2
System.out.print("Enter first number:");
number1 = in.nextInt();
System.out.print("Enter second number:");
number2 = in.nextInt();
// call the methods max and sumTo inside the println statement
System.out.println("The largest number is " + max(number1, number2));
System.out.println("The sum of the numbers is " + sumTo(number1, number2));
}
/******************** greeting method goes here*********************/
public static void greeting(String title, String firstName, String lastName) {
System.out.println("");
System.out.println("Dear " + title + " " + firstName + " " + lastName + ",");
System.out.println("");
}
/***********************end of method*************************/
/******************** max method goes here*********************/
public static int max(int num1, int num2){
if(num1 >= num2){
return num1;
}
else{
return num2;
}
}
/***********************end of method*************************/
/******************** sumTo method goes here*********************/
public static int sumTo(int num1, int num2) {
int counter = 0;
int sum = 0;
if(num1 == num2){
sum = num1;
}
else if (num1 > num2) {
counter = num2;
while(counter != num1 + 1){
sum = sum + counter;
counter++;
}
}
else if (num1 < num2){
counter = num1;
while(counter != num2 + 1){
sum = sum + counter;
counter++;
}
}
return sum;
}
/***********************end of method*************************/
}
现在,我应该提到,我必须用不同的程序做同样的事情(在不同的类中测试一个类中的方法),并且进行得非常顺利。这些程序称为DebugLab和DebugLabTest,我在让DebugLabTest运行提供的方法时没有遇到任何问题。然而,当涉及到Lab7Test时,该类在“Lab7.(方法)”的任何用法中都不能识别“Lab7”,并提供找不到符号的错误代码。它不仅不能识别Lab7(在同一个软件包中),而且每当我试图运行我列出的其他三个程序中的任何一个时,IntelliJ都会直接跳回Lab7Test并打印错误代码。我试过从顶部的run选项卡、类名旁边的灯泡以及右上角的running和debugging按钮运行其他程序。所有这些都会产生相同的结果,我运行它们的唯一方法是删除Lab7Test。如果我答对了您的问题,class
Lab7Test
不会编译,因为它无法将classLab7
归档
如果至少有一个编译错误,整个项目编译将失败。这就是它在Java世界中的工作方式,intelliJ也是这样工作的
由于测试是在编译之后执行的(所有测试都是由一个常规的java进程驱动的,读取JVM就是为了这个目的而产生的),这显然是与二进制代码一起工作的,所以您必须首先编译这些东西
现在,假设您在Lab7Test
中有一个复杂错误。由于编译失败,这意味着您将无法在该模块中运行任何测试,当然包括DebugLabTest
。
删除Lab7Test
时,错误消失,您可以继续
到目前为止,就决议而言,一切都很好
您应该始终检查编译错误到底是什么。java编译器确实是一个“聪明”的软件,它可以帮助您解决错误
您还没有在Lab7Test
类中发布实际的编译错误,但我猜它无法将Lab7
如果是这样,您应该确保它们位于同一个包中。因为如果没有,则Lab7Test
必须包含一行带有Lab7
的“显式”导入。看起来不是这样,类Lab7Test
驻留在默认包中(文件Lab7Test
中没有类似于package abc;
的行)。因此确保Lab7也驻留在相同的包中(默认)包,或者将行import foo.bar.Lab7;
添加到Lab7Test.java
中,假设您确实希望Lab7
文件驻留在包foo.bar
另外,这个答案可能看起来过于谨慎,但很明显,它是由一个在编程中迈出第一步的人提出的,所以它是有意的:)来自:“Java(不要与JavaScript、JScript或JS混淆)…”。“JavaScript(不要与Java混淆)…”我想您需要添加package语句“package Lab7;”参加考试
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.junit.After;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Lab7Test {
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@Test
public void greetingTest() {
Lab7.greeting("Mr.", "Buzz", "Lightyear");
String rawOutput = outContent.toString();
String[] outputLines = rawOutput.split("\n");
assertEquals("", outputLines[0]);
assertEquals("Dear Mr. Buzz Lightyear,", outputLines[1]);
}
@Test
public void max10and2Test() {
int max = Lab7.max(10, 2);
assertEquals(10, max);
}
@Test
public void max2and10Test() {
int max = Lab7.max(2, 10);
assertEquals(10, max);
}
@Test
public void max50and50Test() {
int max = Lab7.max(50, 50);
assertEquals(50, max);
}
@Test
public void maxMinus10andMinus2Test() {
int max = Lab7.max(-10, -2);
assertEquals(-2, max);
}
@Test
public void maxMinus2andMinus10Test() {
int max = Lab7.max(-2, -10);
assertEquals(-2, max);
}
@Test
public void max0and0Test() {
int max = Lab7.max(0, 0);
assertEquals(0, max);
}
@Test
public void sumTo2and10Test() {
int max = Lab7.sumTo(2, 10);
assertEquals(54, max);
}
@Test
public void sumTo10and2Test() {
int max = Lab7.sumTo(10, 2);
assertEquals(54, max);
}
@Test
public void sumTo50and50Test() {
int max = Lab7.sumTo(50, 50);
assertEquals(50, max);
}
@Test
public void sumToMinus10andMinus2Test() {
int max = Lab7.sumTo(-10, -2);
assertEquals(-54, max);
}
@Test
public void sumToMinus2andMinus10Test() {
int max = Lab7.sumTo(-2, -10);
assertEquals(-54, max);
}
@Test
public void sumTo0and0Test() {
int max = Lab7.sumTo(0, 0);
assertEquals(0, max);
}
@After
public void cleanUpStreams() {
System.setOut(null);
System.setErr(null);
}
}