我正在尝试对方法进行测试:
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上使用索引,使用Array.ToString将其转换为String,并将其与String值进行比较。 “ FooBar”。当我尝试寻找一个索引时发生了什么。 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;
}
如果要测试使您的方法具有预期结果数组的结果数组,则可以使用assertArrayEquals
。我在下面提供了示例,您如何做到这一点。
//assume that the below array represents expected result
String[] expectedOutput = {"apple", "mango", "grape"};
//assuem that the below array is returned from the method
//to be tested.
String[] methodOutput = {"apple", "mango", "grape"};
assertArrayEquals(expectedOutput, methodOutput);