Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit测试无法找到要测试的类_Java_Unit Testing_Junit - Fatal编程技术网

Java JUnit测试无法找到要测试的类

Java JUnit测试无法找到要测试的类,java,unit-testing,junit,Java,Unit Testing,Junit,我目前正在为一个简单的方法编写一个JUnit单元测试用例。以下是所讨论的方法: public static Integer[] findUnpairedNumbers(Integer[] numbers) { // catches if passed array is empty or uninitialized if (numbers == null) { throw new IllegalArgumentException(); } // H

我目前正在为一个简单的方法编写一个JUnit单元测试用例。以下是所讨论的方法:

public static Integer[] findUnpairedNumbers(Integer[] numbers) {
    // catches if passed array is empty or uninitialized 
    if (numbers == null) {
        throw new IllegalArgumentException();
    }
    // HashSet initialized to store unpaired numbers
    HashSet<Integer> result = new HashSet<Integer>();
    // Loop through numbers array
    for (int next: numbers) {
        // if HashSet already contains next element, remove that element from the HashSet
        if (result.contains(next)) {
            result.remove(next);
        }
        // Otherwise, add it to the HashSet
        else {
            result.add(next);
        }
    }
    // return the HashSet of unpaired numbers, converting to back to Integer array
    return result.toArray(new Integer[result.size()]);
}

但是,测试类无法识别
findUnpairedNumbers
类。它在同一个包裹里。我还需要进口什么吗?我哪里出了问题

另外,请让我知道是否有任何语法是非正统的,或者是否有其他方法可以改进我的测试用例

但是,测试类无法识别findUnpairedNumbers类。它在同一个包裹里。我还需要进口什么吗


findUnpairedNumbers
是某个类的静态方法。为了调用它,您必须指定它存在于哪个类中

像这样:

Integer[] unpaired = NameOfTheClass.findUnpairedNumbers(numbers);
试验方法 另外,请让我知道是否有任何语法是非正统的,或者是否有其他方法可以改进我的测试用例

不要直接使用
fail()
。通常,我们在测试的断言阶段从JUnit调用
assertSomething()
方法(例如
assertEquals()
)。在您的情况下,我建议
assertarayequals()

注意测试是如何变得更干净的。 我还建议您将测试方法名称重命名为更能描述行为的名称:

@Test
public void findUnpairedNumbersLeavesOnlyNumbersWithoutPairs() { ...
这将使维护人员更容易获得测试意图和预期行为(以防将来失败)


关于静态问题的更多信息 更完整的解释/示例:


假设
findUnpairedNumbers
方法属于名为
FindUnpaired
的类:

package program;
public class FindUnpaired {
    public static Integer[] findUnpairedNumbers(Integer[] numbers) {
        ...
        return result.toArray(new Integer[result.size()]);
    }
}
现在,在测试类中,您可以使用它:

package program;
import static org.junit.Assert.*;
import org.junit.Test;
public class FindUnpairedTest {
    @Test
    public void test() {
        Integer[] numbers = {1, 2, 4, 5, 7, 7, 8, 8, 9, 1, 5};
        Integer[] unpairedCheck = {2, 4};
        Integer[] unpaired = FindUnpaired.findUnpairedNumbers(numbers);
//                           ^^^^^^^^^^^^----------------------------------- changed here
        if (unpaired != unpairedCheck) {
            fail();
        }
    }
}
其他考虑:

  • 您可以直接使用
    FindUnpaired
    ,因为我们假设测试类位于同一个包中。如果包不同,则必须在测试类中导入
    FindUnpaired

    package someOtherPackage;
    import program.FindUnpaired;
    public class FindUnpairedTest {
    

  • 另一个选项是使用
    findUnpairedNumbers
    方法的
    静态
    导入
    。如果遵循此路径,则在调用它时不需要前缀(就像调用当前类中声明的静态方法一样调用它)

  • 您应该创建一个对象来调用要在testClass中测试的方法,然后调用方法
    obj.findUnpairedNumbers()
  • 您应该将被调用的方法设为静态,并调用
    YourClass.findUnpairedNumbers()

  • 您是否已将JUnit库添加到类路径中?我已添加。我以前写过JUnit测试,但用于非常不同的东西。我想这一条的简单让我很困惑。您应该创建一个对象来调用要在testClass中测试的方法,然后调用方法obj.findUnpairedNumbers()或2。您应该使被调用的方法成为静态的,并调用您的class.findUnpairedNumbers()旁注:您应该花更多的时间阅读编译器错误消息。java编译器非常擅长指出源代码中的错误。通常,人们不需要Stackoverflow来理解错误。一个人只需要逐字阅读错误信息;旋转编译器指出的行,并阅读。。。逐字逐句。
    findUnpairedNumbers
    是一种方法,而不是类。。。在一个类中确实有这个方法,对吗?如果它与测试类不在同一个包中,那么您还需要使用完整的类名来引用它。我真不敢相信我错过了。非常感谢。测试正在运行(尽管失败了),我会把它敲定。非常感谢。您可能希望添加另一个选项:对方法使用静态导入;避免将类名放在调用前面。旁注:始终仔细检查人们在代码中做什么。他的方法已经是静态的。给出代码的实际答案比给出一般答案要好。
    package program;
    import static org.junit.Assert.*;
    import org.junit.Test;
    public class FindUnpairedTest {
        @Test
        public void test() {
            Integer[] numbers = {1, 2, 4, 5, 7, 7, 8, 8, 9, 1, 5};
            Integer[] unpairedCheck = {2, 4};
            Integer[] unpaired = FindUnpaired.findUnpairedNumbers(numbers);
    //                           ^^^^^^^^^^^^----------------------------------- changed here
            if (unpaired != unpairedCheck) {
                fail();
            }
        }
    }
    
    package someOtherPackage;
    import program.FindUnpaired;
    public class FindUnpairedTest {
    
    import static program.FindUnpaired.findUnpairedNumbers; // static import
    public class FindUnpairedTest {
        ...
        Integer[] unpaired = findUnpairedNumbers(numbers); // no need to prefix