目录
练习1 SumDigitsTest
计算机科学学生Peter开发的一个应用程序接受一个数并返回该数各位的和。您被分派的任务是在以下场景上创建测试用例:
取一位整数值作为输入的测试用例
取两位整数值作为输入的测试用例
取三位整数值作为输入的测试用例
在用户输入负值时使测试不通过的测试用例
在用户输入小数值时处理异常的测试用例您将如何完成此任务?
SumDigis.java package sumdigits; public class SumDigits { public int sum(int num) { int sum=0; while(num>0) { sum=sum+num%10; num=num/10; } return sum; } public static void main(String[] args) { // TODO code application logic here } }
SumDigitsTest.java package sumdigits; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; public class SumDigitsTest { public SumDigitsTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } //取一位整数值作为输入的测试用例 @Test public void testsumdigits1() { System.out.println("Testing 一位整数"); SumDigits sum = new SumDigits(); int expResult = 5; int result = sum.sum(5); assertEquals(expResult, result); } //取两位整数值作为输入的测试用例 @Test public void testsumdigits2() { System.out.println("Testing 两位整数"); SumDigits sum = new SumDigits(); int expResult = 7; int result = sum.sum(25); assertEquals(expResult, result); } //取三位整数值作为输入的测试用例 @Test public void testsumdigits3() { System.out.println("Testing 三位整数"); SumDigits sum = new SumDigits(); int expResult = 6; int result = sum.sum(150); assertEquals(expResult, result); } //在用户输入负值时使测试不通过的测试用例 @Test public void testsumdigits4() { System.out.println("Testing 负数不通过测试"); SumDigits sum = new SumDigits(); // String expresult = null; int expResult = -2; int result =sum.sum(-20); assertEquals(expResult,result); } //在用户输入小数值时处理异常的测试用例 @Test(expected = IllegalArgumentException.class) public void testsumdigits5(){ SumDigits sum = new SumDigits(); int expResult = 6; int result = sum.sum((int)150.00); //强制数据类型转换 assertEquals(expResult,result); } }
测试结果:
练习2 VowelConsonantTest
Harry 开发了应用程序以检查输入的字符是元音还是辅音。该函数将一个字符取为输入,井在字符是元音字符的情况下返回vowel,否则返回consonant。现在他被分派的任务是通过为所有可能场景(例如检查元音和检查辅音)创建测试用例来测试此应用程序。如果测试用例不通过,应该显示相应的人可读的错误消息。
帮助Harry完成此任务。VowelConsonant.java package vowelconsonant; public class VowelConsonant { public String check(String character) { String v="vowel"; String c="consonant"; if(character=="a"||character=="e"||character=="i"||character=="o"||character=="u") { return v; } else { return c; } } public static void main(String[] args) { } }
VowelConsonantTest.java package vowel; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import vowelconsonant.VowelConsonant; public class VowelTest { public VowelTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } //字符是元音字符的情况下返回vowel @Test public void VowelTest1(){ VowelConsonant v = new VowelConsonant(); String expResult = "vowel"; String result = v.check("o"); assertEquals(expResult,result); } //字母是辅音字母的情况下返回consonant @Test public void VowelTest2(){ VowelConsonant v = new VowelConsonant(); String expResult = "consonant"; String result = v.check("f"); assertEquals(expResult,result); } }
测试结果:
测试类书写模板:
@Test
public void 测试方法名(){
实例化java类对象;
期望值 = 手动计算测试用例的值;
实际值 = 实例化类对象.调用java方法(测试用例);
assertEquals(期望值,实际值);
}
练习3 MockitoShoppingApp
//MockitoShoppingApp //pom.xml <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> <scope>test</scope> </dependency> </dependencies> //MyShoppingCartTest.java public class MyShoppingCartTest { public MyShoppingCartTest() { } public MyShoppingCart cart = null; public MyStore storeMock = null; @Before public void setUp() { storeMock = Mockito.mock(MyStore.class); cart = new MyShoppingCart(); cart.setStore(storeMock); } @Test public void testCountNumberOfInteractions() throws Exception{ ShoppingItem item1 = new ShoppingItem("IPhone",2); cart.addItem(item1); double total = cart.calculateTotalPrice(); Mockito.verify(storeMock,Mockito.times(1)).getPrice(item1.getItemName()); Mockito.verifyNoMoreInteractions(storeMock); } @Test public void testCalculateTotalPrice() throws Exception{ ShoppingItem stubbedItem = new ShoppingItem("Speakers",5); Mockito.when(storeMock.getPrice("Speakers")).thenReturn(100.00); cart.addItem(stubbedItem); } }
练习4 MockShoppingApp
//MockShoppingApp //pom.xml <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> <scope>test</scope> </dependency> MyShoppingCartTest.java public class MyShoppingCartTest { public MyShoppingCartTest() { } public MyShoppingCart cart = null; public MyStore storeMock = null; @Before public void initialize(){ cart = new MyShoppingCart(); storeMock = EasyMock.createMock(MyStore.class); cart.setStore(storeMock); } @Test public void testShoppingCart(){ EasyMock.expect(storeMock.getPrice("Iphone")).andReturn(100.00); EasyMock.expect(storeMock.getPrice("Speakers")).andReturn(20.00); EasyMock.replay(storeMock); ShoppingItem item1 = new ShoppingItem("Iphone",2); ShoppingItem item2 = new ShoppingItem("Speakers",5); cart.addItem(item1); cart.addItem(item2); double total = cart.calculateTotalPrice(); assertEquals("Result",300.00,total,0); EasyMock.verify(storeMock); } @After public void cleanup(){ cart=null; storeMock=null; } }
练习3: 练习4:
练习5 MobileSalesData
// MobileSalesData.java public class MobileSalesData { public double mean; public double variance; public double StdDev; public double mean(int htc, int apple, int samsung, int motorola, int nokia){ while(htc>=0 && apple>=0 && samsung>=0 && motorola>=0 && nokia>=0){ mean = (htc+apple+samsung+motorola+nokia)/5; return mean; } return 0; } public double variance(int htc, int apple, int samsung, int motorola, int nokia){ while(htc>=0 && apple>=0 && samsung>=0 && motorola>=0 && nokia>=0){ mean = 0; mean = (htc+apple+samsung+motorola+nokia)/5; double v1,v2,v3,v4,v5,p1,p2,p3,p4,p5; v1= htc-mean; v2= apple-mean; v3= samsung-mean; v4= motorola-mean; v5= nokia-mean; p1= Math.pow(v1,2); p2= Math.pow(v2,2); p3= Math.pow(v3,2); p4= Math.pow(v4,2); p5= Math.pow(v5,2); variance = (p1+p2+p3+p4+p5)/5; return variance; } return 0; } public static void main(String[] args) { // TODO code application logic here } }
// MobileSalesDataTest.java public class MobileSalesDataTest { public MobileSalesDataTest() { } @BeforeClass ... @Test public void testMean(){ System.out.println("mean"); int htc = 2653; int apple = 2783; int samsung = 2187; int motorola = 2443; int nokia = 1782; MobileSalesData instance = new MobileSalesData(); double expResult = 2369.0; double result = instance.mean(htc,apple,samsung,motorola,nokia); assertEquals(expResult,result,0.5); } @Test public void testMean2(){ ... int motorola = -2443; ... } @Test public void testMean3(){ ... int samsung = 0; ... } @Test public void testVariance(){ System.out.println("variance"); int htc = 2653; int apple = 2783; int samsung = 2187; int motorola = 2443; int nokia = 1782; MobileSalesData instance = new MobileSalesData(); double expResult = 127044.2; double result = instance.variance(htc,apple,samsung,motorola,nokia); assertEquals(expResult,result,0.5); } @Test public void testVariance2(){ ... int samsung = -2187; ... } }