[比较字符串[]使用Junit4

问题描述 投票:1回答:1

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

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,但结果相同。有人指导我如何测试此方法吗?

java arrays unit-testing
1个回答
0
投票

问题的原因是,您不断地附加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

我假设这与FizzBu​​zz的概念相同,这意味着您很可能会遇到另一个问题:每次都附加索引,而不管它是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;
}

-1
投票

如果要测试使您的方法具有预期结果数组的结果数组,则可以使用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);
© www.soinside.com 2019 - 2024. All rights reserved.