Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 JUnit4中正在重置的数组_Java_Arrays_Junit_Junit4 - Fatal编程技术网

Java JUnit4中正在重置的数组

Java JUnit4中正在重置的数组,java,arrays,junit,junit4,Java,Arrays,Junit,Junit4,我正在使用JUnit测试各种插入排序实现的代码,但每次测试之后,数组中的某些值都会重置。为了解释,我需要在我创建的每个插入排序实现的测试用例中找到运行时。基本上,我启动一个秒表,调用排序,停止计时器,我将把这个值——执行时间——保存到一个对象中,然后保存到所述对象的数组中。该代码如下所示: import static org.junit.Assert.*; import org.junit.AfterClass; import org.junit.Before; import org.juni

我正在使用JUnit测试各种插入排序实现的代码,但每次测试之后,数组中的某些值都会重置。为了解释,我需要在我创建的每个插入排序实现的测试用例中找到运行时。基本上,我启动一个秒表,调用排序,停止计时器,我将把这个值——执行时间——保存到一个对象中,然后保存到所述对象的数组中。该代码如下所示:

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.apache.commons.lang3.time.StopWatch;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Arrays;
import java.util.Collections;

public class SortTest 
{       

    private static double seconds16;
    private static double seconds256;
    private static double seconds4096;
    private static StopWatch time = new StopWatch();
    private static Word[] sort16 = new Word[3];
    private static Word[] sort256 = new Word[3];
    private static Word[] sort4096 = new Word[3];

    @Test
    public void testSortInsert() 
    {
        Word[] expectedFirst = TextFilesArrays.expectedSort(TextFilesArrays.getFirstArray());
        Word[] resultFirst = TextFilesArrays.getFirstArray();

        time.start();
        Insertion.sortInsert(resultFirst);
        time.stop();
        seconds16 = time.getTime();
        sort16[0] = new Word("SortInsert", (int)seconds16);
        time.reset();
        assertArrayEquals(expectedFirst, resultFirst);


        Word[] expectedSecond = TextFilesArrays.expectedSort(TextFilesArrays.getSecondArray());
        Word[] resultSecond = TextFilesArrays.getSecondArray();
        time.start();
        Insertion.sortInsert(resultSecond);
        time.stop();
        seconds256 = time.getTime();
        sort256[0]  = new Word("SortInsert", (int)seconds256);
        time.reset();
        assertArrayEquals(expectedSecond, resultSecond);


        Word[] expectedThird = TextFilesArrays.expectedSort(TextFilesArrays.getThirdArray());
        Word[] resultThird = TextFilesArrays.getThirdArray();
        time.start();
        Insertion.sortInsert(resultThird);
        time.stop();
        seconds4096 = time.getTime();
        sort4096[0] = new Word("SortInsert", (int)seconds4096);
        time.reset();
        assertArrayEquals(expectedThird, resultThird);
    }

    @Test
    public void testInsertComparable()
    {
        Word[] expectedFirst = TextFilesArrays.expectedSort(TextFilesArrays.getFirstArray());
        Word[] resultFirst = TextFilesArrays.getFirstArray();
        time.start();
        Insertion.sortComparable(resultFirst);
        time.stop();
        seconds16 = time.getTime();
        sort16[1]  = new Word("SortComparable", (int)seconds16);
        time.reset();
        assertArrayEquals(expectedFirst, resultFirst);

        Word[] expectedSecond = TextFilesArrays.expectedSort(TextFilesArrays.getSecondArray());
        Word[] resultSecond = TextFilesArrays.getSecondArray();
        time.start();
        Insertion.sortComparable(resultSecond);
        time.stop();
        seconds256 = time.getTime();
        sort256[1] = new Word("SortComparable", (int)seconds256);
        time.reset();
        assertArrayEquals(expectedSecond, resultSecond);

        Word[] expectedThird = TextFilesArrays.expectedSort(TextFilesArrays.getThirdArray());
        Word[] resultThird = TextFilesArrays.getThirdArray();
        time.start();
        Insertion.sortComparable(resultThird);
        time.stop();
        seconds4096 = time.getTime();
        sort4096[1] = new Word("SortComparable", (int)seconds4096);
        time.reset();
        assertArrayEquals(expectedThird, resultThird);
    }   

    @Test
    public void testInsertBinary()
    {
        Word[] expectedFirst = TextFilesArrays.expectedSort(TextFilesArrays.getFirstArray());
        Word[] resultFirst = TextFilesArrays.getFirstArray();
        time.start();
        Insertion.sortBinary(resultFirst);
        time.stop();
        seconds16 = time.getTime();
        sort16[2] = new Word("SortBinary", (int)seconds16);
        time.reset();
        assertArrayEquals(expectedFirst, resultFirst);

        Word[] expectedSecond = TextFilesArrays.expectedSort(TextFilesArrays.getSecondArray());
        Word[] resultSecond = TextFilesArrays.getSecondArray();
        time.start();
        Insertion.sortBinary(resultSecond);
        time.stop();
        seconds256 = time.getTime();
        sort256[2] = new Word("SortBinary", (int)seconds256);
        time.reset();
        assertArrayEquals(expectedSecond, resultSecond);

        Word[] expectedThird = TextFilesArrays.expectedSort(TextFilesArrays.getThirdArray());
        Word[] resultThird = TextFilesArrays.getThirdArray();
        time.start();
        Insertion.sortBinary(resultThird);
        time.stop();    
        seconds4096 = time.getTime();
        sort4096[2] = new Word("SortBinary", (int)seconds4096);
        time.reset();
        assertArrayEquals(expectedThird, resultThird);
    }
现在发生的是在第一次测试期间,sort16[0]、sort256[0]和sort4096[0]的值都设置为适当的运行时,作为单词对象字符串a、int b。我遇到的问题是,在下一次测试开始时,sort16[0]的int部分被重置为0,然后sortXXXX[1]的所有相应值都被正确设置。最后,当第三个测试开始时,sort16[1]的int部分和sort256[1]的int部分被设置为零。使最终阵列不正确的原因是:

sort16={WordString x,int 0,WordString x,int 0,WordString x,int x} sort256={WordString x,int x,WordString x,int 0,WordString x,int x} sort4056={WordString x,int x,WordString x,int x,WordString x,int x}

其中x是正确的值。我完全搞不懂为什么这些值会以这种方式设置为0,如果有任何帮助,我将不胜感激


**编辑:我注意到数组中没有一个值是正确的。在上面的代码中,x不是正确的值。相反,它们改为一个随机较小的整数,比如24,而有些整数应该是17000。

还有一件事。我必须使用秒表方法来记录每种时间,但我不能100%确定我是否正确使用了它。当我运行该程序时,较小种类的16有时比较大种类的256慢。例如,对16个元素进行排序的时间为1秒,但对256个元素进行排序的时间为0.5秒。这是可能的,还是我做错了什么?您的Word类中没有错误地包含静态字段?这可能会导致值发生意外更改。。。总的来说,我担心这个问题无法回答,因为我们没有足够的信息来重现这个问题,也没有真正理解问题的原因。试着用一个最小的可重复的例子。不,Word类上没有静态字段。我知道这个问题没有提供太多的细节来说明到底是什么使得这个问题难以复制。我只是希望,也许有人以前知道JUnit在@Test调用中表现得很奇怪,可能会改变值。我假设问题可能就在某个地方,我正在更改数组而没有注意到它。我明天会进一步调查。另外,如果您愿意,我可以为您提供使测试运行的其余代码,它只有3个其他文件200行代码。一个可复制的问题肯定会帮助您获得答案。但是200行代码对于一个如此简单的问题来说太多了。您需要专注于将代码剥离到演示问题所需的最低限度。例如,您提供的示例有许多与时间相关的代码,但您描述的问题只与数组的内容有关。你需要三次测试来证明这个问题,还是两次就足够了?去掉任何不影响结果的代码,然后将其添加到问题中。看见