packageex3;importorg.junit.Test;import static org.junit.Assert.*;public classWhiteBoxUnitTestCases {private ServiceForTesting service = newServiceForTestingImpl();

@Testpublic voidstatementCoverage() {

decisionCoverageOrBranchCoverage();

}

@Testpublic voiddecisionCoverageOrBranchCoverage() {float output1 = service.getCommission(0, 1, 1); //数量不合法

float output2 = service.getCommission(1, 2, 3); //< 1000

float output3 = service.getCommission(10, 20, 20); //< 1800

float output4 = service.getCommission(20, 40, 40); //>= 1800

assertEquals(-1, output1, 0.01);

assertEquals(12.4, output2, 0.01); //actual:12.400001

assertEquals(124.0, output3, 0.01);

assertEquals(324.0, output4, 0.01);

}

@Testpublic voidconditionCoverage() {/*确保每个判定中的每个条件都获得可能的取值,

即每个条件至少有一次真值、有一次假值。*/decisionConditionCoverage();

}

@Testpublic void decisionConditionCoverage() { //Decision/Condition Coverage

/*Decision/Condition Coverage

保证每个Decision取一次真假,并且每个Condition也取一次真和假*/

/*条件(共5个):①headphones <= 0 ②shells < 0

③protectors < 0 ④total < 1000 ⑤total < 1800

取值1:1 (后续判定不会执行)

取值2:0 1 (后续判定不会执行)

取值3:0 0 1(后续判定不会执行)

取值4:0 0 0 1(最后一个判定不会执行)

取值5:0 0 0 0 1

取值6:0 0 0 0 0*/assertEquals(-1, service.getCommission(-1, 1, 1), 0.01);

assertEquals(-1, service.getCommission(1, -1, 1), 0.01);

assertEquals(-1, service.getCommission(1, 1, -1), 0.01);

assertEquals(81.8, service.getCommission(10, 1, 1), 0.01); //total=818.0

assertEquals(192.7, service.getCommission(20, 1, 1), 0.01); //total=1618.0

assertEquals(343.6, service.getCommission(30, 1, 1), 0.01); //total=2418.0

}

@Testpublic void multipleConditionCoverage() { //Branch Condition Combination Coverage//略。由 0 0 0 0 0 列举到 1 1 1 1 1 共 2^5 组测试用例

}

@Testpublic void MC_DC() { //Modified Condition/Decision Coverage//multipleConditionCoverage的子集//核心意思是每个条件都要独立影响判定结果。//对于一般企业来说,建议用MC/DC作为统一的覆盖标准。

decisionConditionCoverage();

}

@Testpublic voidpathCoverage() {//覆盖从开始到结束的所有路径

decisionConditionCoverage();

}

}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐