JUnit测试未完成

时间:2015-04-28 20:16:35

标签: java junit

我想在 JUnit 中运行一些测试,但是没有一个完成,我不得不终止测试,因为它没有自行退出。我在下面添加了所有必要的类:

enter image description here

测试是这样的:

import static org.junit.Assert.assertEquals;

import java.util.Arrays;

import org.junit.Test;



public class AnagramTest {

Anagram an;

@Test 
public void testSpecialCharacters() {
    an = new Anagram("@#$%^&!@");
    for (int i=0;i<an.generate().size();i++)
        assertEquals("Special Characters ", isAnagram("@#$%^&!@",String.valueOf(an.generate().get(i))), true);
}


@Test 
public void testDoubleLetter() {
    an = new Anagram("bc");
    String[] expected = {"bc","cb"};
    for (int i=0;i<expected.length;i++)
        assertEquals("Double letter", expected[i], an.generate().get(i));
}

public static boolean isAnagram(String str1, String str2){

    if(str1.length() != str2.length()) {return false;}

    char[] a, b;
    Arrays.sort(a = str1.toCharArray());
    Arrays.sort(b = str2.toCharArray());
    return Arrays.equals(a,b);
  }...

和Anagram课程:

import java.util.ArrayList;
import java.util.List;

public class Anagram {

private char[] input;
private StringBuffer sb = new StringBuffer();
private List output;

public Anagram(String input){ 
   this.input = input.toCharArray();
}

public List generate(){
  output = new ArrayList();
  doAnagram(input.length);
  return output;
}

private void doAnagram(int rsize){
     if (rsize==1){ return; }
     for (int i=0; i < rsize ; i++){
     doAnagram(rsize-1);
     if (rsize==2){
         for (int j=0; j < input.length; j++){
         sb.append(input[j]);
         }
         output.add(sb.toString());
         sb.delete(0,input.length+1);
     }
     rotate(rsize);
      }
  }

 private void rotate(int rsize){
     int i;
     int pos = input.length - rsize;
     char tmp = input[pos];
     for (i=pos + 1; i < input.length ; i++){
     input[i-1] = input[i];
     }
     input[i-1] = tmp;
 }
 }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在您的测试中,在for循环中,an.generate().size() 40320 - 可能需要一段时间才能循环播放!这个值也会在循环的每次迭代中重建,这是糟糕的设计。