我有一个理论问题。给出一种方法:
public int findSmallestArrayValue(int[] values){
int smallest = values[0];
for (int count = 0; count < values.length; count++){
if(values[count] < smallest){
smallest = values[count];
}
}
return smallest;
}
您可以在这里进行单元测试吗?到目前为止,我想出了:
assertEquals(array.findSmallestArrayValue(new int[]{5,11,3,6,8}),3);
assertEquals(array.findSmallestArrayValue(new int[]{5,5,5,5,5}),5);
assertEquals(array.findSmallestArrayValue(new int[]{-1,2,3,4,5}),-1);
现在我问自己,还有什么有用/可能?例如,我想出了:
特别是什么是实际有用的,什么不是?你觉得怎么样?
答案 0 :(得分:0)
到目前为止,您当前的测试想法都很好。这是我考虑添加的其他测试
@Test(expected = IllegalArgumentException.class)
public void emptyArrayIsNotAcceptedArgument() {
array.findSmallestArrayValue(new int[]{});
}
@Test(expected = IllegalArgumentException.class)
public void nullArrayIsNotAcceptedArgument() {
array.findSmallestArrayValue(null);
}
@Test
public void lastValueIsSmallest() {
assertEquals(array.findSmallestArrayValue(new int[]{0,-1}),-1);
}
至于你的想法:
答案 1 :(得分:0)
有些想到的案例:
values.length > 0
values != null
这些是您将在方法中处理的情况,并确保该方法输出正确的错误消息或您写入的异常。
答案 2 :(得分:0)
您总是希望测试边界条件。所以你想要测试:
你有一些人和其他人提供了其他人。请记住,进行这样的测试:
assertEquals(array.findSmallestArrayValue(new int[]{5,11,3,6,8}),3);
让这样的测试很有价值:
assertEquals(array.findSmallestArrayValue(new int[]{5,11,6,8}),5);
现在,当您遇到方法中的缺陷时,您将需要编写一个公开该缺陷条件的测试。
答案 3 :(得分:0)
真棒!谢谢你的回答,我很感激!我认为好的组合是关键:
public class ArrayValuesTest {
ArrayValues array = new ArrayValues();
@Test
public void returnsSmallestValue() {
assertEquals(array.findSmallestArrayValue(new int[]{5,11,3,6,8}),3);
assertEquals(array.findSmallestArrayValue(new int[]{5}),5);
assertEquals(array.findSmallestArrayValue(new int[]{0}),0);
assertEquals(array.findSmallestArrayValue(new int[]{-5,-8,-3,-6,-11}),-11);
assertEquals(array.findSmallestArrayValue(new int[]{-20,11,-3,6,-8}),-20);
}
@Test(expected = ArrayIndexOutOfBoundsException.class)
public void emptyArrayIsNotAcceptedArgument() {
array.findSmallestArrayValue(new int[]{});
}
@Test(expected = NullPointerException.class)
public void nullArrayIsNotAcceptedArgument() {
array.findSmallestArrayValue(null);
}
}
您是否认为在第一种测试方法中包含多个断言而不是使用单独的测试方法是不好的做法?