Java JUnit5测试
如何通过使用java和@test注释的junit测试用例实现此类中3个方法的完整分支覆盖Java JUnit5测试,java,eclipse,junit,junit4,junit5,Java,Eclipse,Junit,Junit4,Junit5,如何通过使用java和@test注释的junit测试用例实现此类中3个方法的完整分支覆盖 public class StringStack { private int capacity = 10; private int pointer = 0; private String[] objects = new String[capacity]; public void push(String o) { if (pointer >= capacity) throw n
public class StringStack {
private int capacity = 10;
private int pointer = 0;
private String[] objects = new String[capacity];
public void push(String o) {
if (pointer >= capacity)
throw new IllegalArgumentException("Stack exceeded capacity!");
objects[pointer++] = o;
}
public String pop() {
if (pointer <= 0)
throw new IllegalArgumentException("Stack empty");
return objects[--pointer];
}
public boolean isEmpty() {
return pointer <= 0;
}
我将为第一个函数提供一个示例
public void push(String o) {
if (pointer >= capacity)
throw new IllegalArgumentException("Stack exceeded capacity!");
objects[pointer++] = o;
}
您需要3个统一测试才能完全覆盖此测试
对于分支覆盖率,您只需要1和3或2和3,尽管我建议所有这三个都用于关键的功能 我将为第一个函数提供一个示例
public void push(String o) {
if (pointer >= capacity)
throw new IllegalArgumentException("Stack exceeded capacity!");
objects[pointer++] = o;
}
您需要3个统一测试才能完全覆盖此测试
对于分支覆盖率,您只需要1和3或2和3,尽管我建议所有这三个都用于关键的功能 可能低于测试,但有助于获得全面覆盖 推法试验
- 指针>=容量
@Test(exception = IllegalArgumentException.class) public void push_PointerGreaterThanCapacity_ExceptionThrow(){ WhiteBox.setInternalState(yourObject, "pointer",11); String inputString = "Hello"; yourObject.push(inputString); }
- 指针<容量
@Test public void push_PointerSmallerThanCapacity_ExceptionThrow(){ String inputString = "Hello"; yourObject.push(inputString); int pointer = WhiteBox.getInternalState(yourObject,"pointer"); String[] objects = WhiteBox.getInternalState(yourObject,"objects"); assertEquals(inputString, objects[pointer-1]); }
- 指针<0
@Test(exception = IllegalArgumentException.class) public void pop_PointerNegative_ExceptionThrow(){ WhiteBox.setInternalState(yourObject, "pointer",-1); String inputString = "Hello"; yourObject.push(inputString); }
- 指针>0
@Test public void pop_pointerGreaterThenZero_PopValue(){ //set pointer WhiteBox.setInternalState(yourObject, "pointer",2); String[] stringList = {"String0","String1","String2"}; //object array WhiteBox.setInternalState(yourObject, "objects",stringList); String actualOutput = yourObject.pop(); assertEquals(actualOutput, stringList[1]); }
在这里,您的对象是您测试的类的对象。可能低于测试,同时有助于获得全面覆盖 推法试验
- 指针>=容量
@Test(exception = IllegalArgumentException.class) public void push_PointerGreaterThanCapacity_ExceptionThrow(){ WhiteBox.setInternalState(yourObject, "pointer",11); String inputString = "Hello"; yourObject.push(inputString); }
- 指针<容量
@Test public void push_PointerSmallerThanCapacity_ExceptionThrow(){ String inputString = "Hello"; yourObject.push(inputString); int pointer = WhiteBox.getInternalState(yourObject,"pointer"); String[] objects = WhiteBox.getInternalState(yourObject,"objects"); assertEquals(inputString, objects[pointer-1]); }
- 指针<0
@Test(exception = IllegalArgumentException.class) public void pop_PointerNegative_ExceptionThrow(){ WhiteBox.setInternalState(yourObject, "pointer",-1); String inputString = "Hello"; yourObject.push(inputString); }
- 指针>0
@Test public void pop_pointerGreaterThenZero_PopValue(){ //set pointer WhiteBox.setInternalState(yourObject, "pointer",2); String[] stringList = {"String0","String1","String2"}; //object array WhiteBox.setInternalState(yourObject, "objects",stringList); String actualOutput = yourObject.pop(); assertEquals(actualOutput, stringList[1]); }
这里,yourObject是您测试的类的对象。通过编写测试。但是为什么你想达到100%的分支覆盖率呢?不要在评论中发表你的意见。编辑我们的问题。如果您正在使用,为什么这个问题有标签?请显示您的测试。又一个问题:为什么要实现100%的分支机构覆盖率?我建议编写有价值的测试,例如行为测试。你的代码无法编译。从解决这个问题开始。然后意识到将断言放在try块中并不是您需要做的事情。您需要做的是(如果您真的不希望JUnit5支持异常测试),将对方法的调用放在try块中。你的一些测试对我来说没什么意义。在编写代码之前,我建议您编写测试的文本描述,比如“从空堆栈中弹出一个元素会引发异常,因为没有要弹出的内容”。在testTC3中这样做可能会让您认识到自己的错误。但是为什么你想达到100%的分支覆盖率呢?不要在评论中发表你的意见。编辑我们的问题。如果您正在使用,为什么这个问题有标签?请显示您的测试。又一个问题:为什么要实现100%的分支机构覆盖率?我建议编写有价值的测试,例如行为测试。你的代码无法编译。从解决这个问题开始。然后意识到将断言放在try块中并不是您需要做的事情。您需要做的是(如果您真的不希望JUnit5支持异常测试),将对方法的调用放在try块中。你的一些测试对我来说没什么意义。在编写代码之前,我建议您编写测试的文本描述,比如“从空堆栈中弹出一个元素会引发异常,因为没有要弹出的内容”。在testTC3中这样做可能会让您意识到自己的错误。“您需要3个unity测试来完全覆盖这一个”-我会质疑这一说法。如果您指的是分支覆盖率,那么一个“仅”需要两种情况(
pointer
和pointer>=capacity
)。如果你想实现C3覆盖。。。好。。。祝你好运。对于分支机构的保险,我会同意的。我发现为边缘案例编写测试很容易发现真正的逻辑错误。这就是为什么我说要完全涵盖这一点。我会更新答案,让它更清楚。“你需要3个统一测试来完全覆盖这一个”-我会质疑这一说法。如果您指的是分支覆盖率,那么一个“仅”需要两种情况(pointer
和pointer>=capacity
)。如果想要实现C3覆盖率。。。好。。。祝你好运。对于分支机构的保险,我会同意的。我发现为边缘案例编写测试很容易发现真正的逻辑错误。这就是为什么我说要完全涵盖这一点。我将更新答案以澄清问题。我在yourObject上收到一个错误,我将用什么替换它?也非常感谢您提供了这个有用的答案,这是调用函数的类对象。我在yourObject上收到一个错误,我应该用什么来替换它?也非常感谢您提供了这个有用的答案,即调用函数的类对象。