使用 Junit4 比较 String[]



我正在尝试对方法进行测试:

public  String[] getFooBar(int size) {
String[] stringsArray = new String[100];
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= size; i++) {
stringBuilder.append(String.format(i + " "));
if (i % 3 == 0) {
stringBuilder.append(String.format("Foo"));
}
if (i % 5 == 0) {
stringBuilder.append(String.format("Bar"));
}
stringBuilder.append(System.lineSeparator());
stringsArray[i] = stringBuilder.toString();
}
return stringsArray;
}

}

我尝试在数组上使用索引,使用 Array.ToString 将其转换为字符串并将其与字符串值进行比较,例如。"福吧"。当我尝试寻找一个索引时会发生什么,例如。50 我从表中获取以 0 - 50 开头的所有索引。我尝试做ArrayList,但结果是一样的。有人指导我如何测试这种方法?

出现问题的原因是您不断追加 StringBuilder,然后将每个索引设置为该附加值。这意味着每个索引将如下所示:

index 0: 0
index 1: 0 1
index 2: 0 1 2
index 3: 0 1 2 3 foo
index 4: 0 1 2 3 foo 4
index 5: 0 1 2 3 foo 4 5 bar

我认为这与 FizzBuzz 的概念相同,这意味着您很可能有另一个问题:您每次都会附加索引,无论它是 3 的倍数还是 5 的倍数。我很确定你不希望这样。你可能想要更接近这个的东西:

public  String[] getFooBar(int size) {
String[] stringsArray = new String[100];
for (int i = 0; i <= size; i++) {
StringBuilder stringBuilder = new StringBuilder();
if (i % 3 == 0) {
stringBuilder.append(String.format("Foo"));
}
if (i % 5 == 0) {
stringBuilder.append(String.format("Bar"));
}
if(i % 5 != 0 && i % 3 != 0) {
stringsArray[i] = Integer.toString(i);
} else {
stringsArray[i] = stringBuilder.toString();
}
}
return stringsArray;
}

但真的不需要所有这些。你可以这样做:

public String[] getFooBar(int size) {
String[] arr = new String[100];
for(int i = 0; i <= size; i++) {
String str = ""; // In situations like this the JVM turns this into a StringBuilder behind the scenes
if(i % 3 == 0) {
str += "Foo";
}
if(i % 5 == 0) {
str += "Bar";
}
if(i % 3 != 0 && i % 5 != 0) {
arr[i] = Integer.toString(i);
} else {
arr[i] = str;
}
}
return arr;
}

最新更新