JUnit 测试未完成
JUnit test not completing
我试图 运行 在 JUnit 中进行一些测试,但是其中 none 已经完成,我不得不终止测试,因为它没有退出它自己的。我在下面添加了所有必要的 classes:
测试是这样的:
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);
}...
和字谜 class:
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;
}
}
我做错了什么?
在您的测试中,在 for 循环中,an.generate().size()
是 40320 - 循环可能需要一段时间!这个值也在循环的每次迭代中重建,这是糟糕的设计。
我试图 运行 在 JUnit 中进行一些测试,但是其中 none 已经完成,我不得不终止测试,因为它没有退出它自己的。我在下面添加了所有必要的 classes:
测试是这样的:
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);
}...
和字谜 class:
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;
}
}
我做错了什么?
在您的测试中,在 for 循环中,an.generate().size()
是 40320 - 循环可能需要一段时间!这个值也在循环的每次迭代中重建,这是糟糕的设计。