白盒测试案例分析(在十个球中找一个假球),并在Junit下进行测试
程序员文章站
2024-03-15 18:24:06
...
题目
使用白盒测试用例设计方法为下面的程序设计测试用例(基本路径测试)并Junit下测试:程序要求:10个铅球中有一个假球(比其他铅球的重量要轻),用天平三次称出假球。程序设计思路:第一次使用天平分别称5个球,判断轻的一边有假球;拿出轻的5个球,取出其中4个第二次称,两边分别放2个球:如果两边同重,则剩下的球为假球;若两边不同重,拿出轻的两个球称第三次,轻的为假球。
待测程序代码
在这里插入代码片
public class SearchBall {
private static int x[]=new int[10];
public SearchBall(){}
public void setBWeight(int w[]){
for(int i=0;i<w.length;i++){
x[i]=w[i];
}
}
public String BeginSearch(){
if(x[0]+x[1]+x[2]+x[3]+x[4]<x[5]+x[6]+x[7]+x[8]+x[9]){
if(x[1]+x[2]==x[3]+x[4]){
return "1号是假球";
}
if(x[1]+x[2]<x[3]+x[4]){
if (x[1]<x[2]) {
return "2号是假球";
}else {
return "3号是假球";
}
}else {
if (x[3]<x[4]){
return "4号是假球";
}
else{
return "5号是假球";
}
}
}else {
if(x[6]+x[7]==x[8]+x[9]){
return "6号是假球";
}
if(x[6]+x[7]<x[8]+x[9]) {
if (x[6]<x[7]) {
return "7号是假球";
}else {
return "8号是假球";
}
}else {
if (x[8]<x[9]) {
return "9号是假球";
}else {
return "10号是假球";
}
}
}
}
}
测试用例的编写
画出流程图如下:
条件:
A:x[0]+x[1]+x[2]+x[3]+x[4]<x[5]+x[6]+x[7]+x[8]+x[9]
B:x[1]+x[2]==x[3]+x[4]
C:x[1]+x[2]<x[3]+x[4]
D:x[1]<x[2]
E:x[3]<x[4]
F:x[6]+x[7]==x[8]+x[9]
G:x[6]+x[7]<x[8]+x[9]
H:x[6]<x[7]
I:x[8]<x[9]
流图:
测试用例:
用例输入 | 期待输出 | 覆盖路径 |
---|---|---|
{6,8,8,8,8,8,8,8,8,8} | 1号是假球 | 1-2-3 |
{8,6,8,8,8,8,8,8,8,8} | 2号是假球 | 1-2-4-5-7 |
{8,8,6,8,8,8,8,8,8,8} | 3号是假球 | 1-2-4-5-8 |
{8,8,8,6,8,8,8,8,8,8} | 4号是假球 | 1-2-4-6-9 |
{8,8,8,8,6,8,8,8,8,8} | 5号是假球 | 1-2-4-6-10 |
{8,8,8,8,8,6,8,8,8,8} | 6号是假球 | 1-11-12 |
{8,8,8,8,8,8,6,8,8,8} | 7号是假球 | 1-11-13-14-16 |
{8,8,8,8,8,8,8,6,8,8} | 8号是假球 | 1-11-13-14-17 |
{8,8,8,8,8,8,8,8,6,8} | 9号是假球 | 1-11-13-15-18 |
{8,8,8,8,8,8,8,8,8,6} | 10号是假球 | 1-11-13-15-19 |
测试程序设计
package com.softtest.baihe.test;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import com.softtest.baihe.SearchBall;
class SearchBallTest {
@BeforeEach
void setUp() throws Exception {
}
@Test
void testBeginSearch1() {
SearchBall ball=new SearchBall();
int []w= {6,8,8,8,8,8,8,8,8,8};
ball.setBWeight(w);
assertEquals("1号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch2() {
SearchBall ball=new SearchBall();
int []w= {8,6,8,8,8,8,8,8,8,8};
ball.setBWeight(w);
assertEquals("2号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch3() {
SearchBall ball=new SearchBall();
int []w= {8,8,6,8,8,8,8,8,8,8};
ball.setBWeight(w);
assertEquals("3号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch4() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,6,8,8,8,8,8,8};
ball.setBWeight(w);
assertEquals("4号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch5() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,8,6,8,8,8,8,8};
ball.setBWeight(w);
assertEquals("5号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch6() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,8,8,6,8,8,8,8};
ball.setBWeight(w);
assertEquals("6号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch7() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,8,8,8,6,8,8,8};
ball.setBWeight(w);
assertEquals("7号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch8() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,8,8,8,8,6,8,8};
ball.setBWeight(w);
assertEquals("8号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch9() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,8,8,8,8,8,6,8};
ball.setBWeight(w);
assertEquals("9号是假球",ball.BeginSearch());
}
@Test
void testBeginSearch10() {
SearchBall ball=new SearchBall();
int []w= {8,8,8,8,8,8,8,8,8,6};
ball.setBWeight(w);
assertEquals("10号是假球",ball.BeginSearch());
}
测试结果
改进
根据测试用例表可以看出10个测试用例很有规律,所以可以在测试程序中用一个循环,就不用再连续写10个test函数了。
class SearchBallTest {
@BeforeEach
void setUp() throws Exception {
}
@Test
void testBeginSearch1() {
SearchBall ball=new SearchBall();
int w[];
//用循环将各个路径进行遍历测试
for(int i=0;i<10;i++){
w=new int[]{8,8,8,8,8,8,8,8,8,8};
w[i]=6;
ball.setBWeight(w);
int a=i+1;
assertEquals(a+"号是假球",ball.BeginSearch());
}
}
}
上一篇: Java类与对象
下一篇: android学习笔记-MVP实例