Java Tools
Java Tools
com
Java Tools
▪ CVS
▪ Log4J
▪ JUnit
▪ SVN
▪ MAVEN
▪ Agile
JUNIT
▪ Introduction
▪ Unit Testing
▪ Terminology
▪ Installation of JUnit
▪ JUnit
▪ Introduction to JUnit API
▪ Test
▪ TestCase
▪ Assert
▪ TestRunner
▪ TestSuite
▪ Preparation
▪ Annotations
▪ Assert statement
Example 1
Person.java
package com;
import java.util.logging.Logger;
int a,b;
Logger log = Logger.getAnonymousLogger();
public int add(int a, int b){
this.a=a;
this.b=b;
log.info("entered value for a ="+a);
log.info("entered value for b ="+b);
return a+b;
}
p.add(2,4);
}
PersonTest.java
package com;
2
[email protected]
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
Person p=null;
@BeforeClass
public static void setUpBeforeClass() throws
Exception {
System.out.println("setUpBeforeClass");
}
@AfterClass
public static void tearDownAfterClass()
throws Exception {
System.out.println("tearDownAfterClass");
}
@Before
public void setUp() throws Exception {
System.out.println("setUp");
p=new Person();
}
@After
public void tearDown() throws Exception {
System.out.println("tearDown");
p=null;
}
@Test
public void testAdd() {
Assert.assertEquals(10,p.add(2,8));
3
[email protected]
@Test
public void testMain() {
System.out.println("main success");
}
output :
setUpBeforeClass
setUp
Dec 13, 2014 4:00:43 PM com.Person add
INFO: entered value for a =2
tearDown
Dec 13, 2014 4:00:43 PM com.Person add
INFO: entered value for b =8
setUp
main success
tearDown
tearDownAfterClass
Example 2
TestJunit.java
package com;
import org.junit.Test;
@Test
public void testAdd(){
String str="Junit is working fine";
assertEquals("Junit is working fine", str);
}
TestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
output :
true
JUnit write Tests :
EmployeeDetails.java
package com;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getMonthlySalary() {
return monthlySalary;
}
public void setMonthlySalary(double monthlySalary)
{
this.monthlySalary = monthlySalary;
}
}//class
EmpBusinessLogic.java
package com;
public double
calculateYearlySalary(EmployeeDetails empDetails){
double yearlySalary=0;
yearlySalary=empDetails.getMonthlySalary()*12;
return yearlySalary;
}
}
EmpTestCase.java
package com;
import org.junit.Test;
@Test
public void testCalculateAppraisal(){
empDetails.setName("Ashok");
empDetails.setAge(27);
empDetails.setMonthlySalary(8000d);
double
appraisal=empLogic.calculateAppraisal(empDetails);
assertEquals(500, appraisal,0.0);
}
@Test
public void testCalculateYearlySalary(){
empDetails.setName("Ashok");
empDetails.setAge(27);
empDetails.setMonthlySalary(8000d);
double
salary=empLogic.calculateYearlySalary(empDetails);
assertEquals(96000,salary,0.0);
}
}//class
EmpTestRunner.java
package com;
import org.junit.runner.JUnitCore;
7
[email protected]
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
System.out.println(result.wasSuccessful());
}//main
output :
true
JUNIT using Assertion :
methods :
void assertEquals(boolean expected, boolean actual)
void assertTrue(boolean expected, boolean actual)
void assertFalse(boolean condition)
void assertNotNull(Object object)
void assertNull(Object object)
void assertSame(boolean condition)
void assertNotSame(boolean condition)
void assertArrayEquals(expectedArray, resultArray);
Ex :
AssertionTestCase.java
package com;
import org.junit.Test;
@Test
public void testAssertions(){
String s1=new String("abc");
String s2=new String("abc");
String s3=null;
String s4="abc";
String s5="abc";
int i1=234;
int i2=456;
String[] expectedArray={"one","two","three"};
String[] resultArray={"one","two","three"};
assertEquals(s1,s2);
assertTrue(i1<i2);
assertFalse(i1>i2);
assertNotNull(s1);
assertNull(s3);
assertSame(s4,s5);
assertNotSame(s1,s2);
assertArrayEquals(expectedArray,resultArray);
}
AssertionTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
for(Failure failure:result.getFailures()){
System.out.println(failure.toString());
}//for
System.out.println(result.wasSuccessful());
}//main
}
Annotation :
@Test
@Before
@After
@BeforeClass
@AfterClass
@Ignore
AnnotationTestCase.java
10
[email protected]
package com;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
@BeforeClass
public static void beforeClass(){
System.out.println("in before class");
}
@AfterClass
public static void afterClass(){
System.out.println("in after class");
}
@Before
public void before(){
System.out.println("in before");
}
@After
public void after(){
System.out.println("in after");
}
@Test
public void test(){
System.out.println("in test");
}
@Ignore
public void ignoreTest(){
System.out.println("in ignore test");
}
}//class
AnnotationTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
output:
in before class
in before
in test
in after
in after class
true
JUNIT Executing Tests
MessageApp.java
package com;
this.message=message;
}
}
MessageTestCase.java
package com;
import org.junit.Test;
@Test
public void testPrintMessage(){
message="new word"; //--> 1
assertEquals(message,messageApp.printMessage());
}
}//class
MessageTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
Result
result=JUnitCore.runClasses(MessageTestCase.class)
;
for(Failure failure:result.getFailures()){
System.out.println(failure.toString());
}//for
System.out.println(result.wasSuccessful());
}//main
output :
Hello
testPrintMessage(com.MessageTestCase):
expected:<[new word]> but was:<[Hello]>
false
in the above program, if we comments line (1) the output
is : true
JUNIT Test Suit
MessageUtil.java
package com;
System.out.println(message);
return message;
}
}
MessageTestCaseOne.java
package com;
@Test
public void testPrintMessage(){
System.out.println("inside testPrintMessage()");
assertEquals(message,messageUtil.printMessage());
}
}//class
MessageTestCaseTwo.java
package com;
import org.junit.Test;
@Test
public void testSalutationMessage(){
System.out.println("in testSalutationTest()");
message="Hi "+"Ashok";
assertEquals(message,messageUtil.salutationMessage
());
}
}//class
MessageTestSuit.java
package com;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
MessageTestCaseOne.class,
MessageTestCaseTwo.class
})
}
MessageTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
output :
inside testPrintMessage()
Ashok
in testSalutationTest()
Hi Ashok
true
JUNIT Ignore Test
MessageUtil.java
package com;
}
MessageTestCase.java
package com;
import org.junit.Ignore;
import org.junit.Test;
@Ignore
@Test
public void testPrintMessage(){
System.out.println("inside testPrintMessage()");
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage(){
System.out.println("in testSalutationTest()");
message="Hi!"+"Ashok";
assertEquals(message,messageUtil.salutationMessage
());
}
}//class
MessageTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
System.out.println(failure.toString());
}//for
System.out.println(result.wasSuccessful());
}//main
output:
in testSalutationTest()
Hi!Ashok
true
package com;
import org.junit.Ignore;
import org.junit.Test;
@Ignore
public class MessageTestCase {
String message="Ashok";
MessageUtil messageUtil=new MessageUtil(message);
@Test
public void testPrintMessage(){
System.out.println("inside testPrintMessage()");
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage(){
System.out.println("in testSalutationTest()");
message="Hi!"+"Ashok";
assertEquals(message,messageUtil.salutationMessage
());
}
19
[email protected]
}//class
output: true
}
MessageTestCase.java
package com;
@Test(timeout=1000)
public void testPrintMessage(){
System.out.println("inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage(){
System.out.println("in testSalutationTest()");
message="Hi!"+"Ashok";
assertEquals(message,messageUtil.salutationMessage
());
}
}//class
MessageTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
output :
in testSalutationTest()
Hi!Ashok
inside testPrintMessage()
Ashok
testPrintMessage(com.MessageTestCase):
test timed out after 1000 milliseconds
false
JUNIT Exception Test
MessageUtil.java
package com;
}
MessageTestCase.java
package com;
String message="Ashok";
MessageUtil messageUtil=new MessageUtil(message);
@Test(expected=ArithmeticException.class)
public void testPrintMessage(){
System.out.println("inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage(){
System.out.println("in testSalutationTest()");
message="Hi!"+"Ashok";
assertEquals(message,messageUtil.salutationMessage
());
}
}//class
MessageTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
output:
in testSalutationTest()
Hi!Ashok
inside testPrintMessage()
Ashok
true
JUNIT Parameterized Test
PrimeNumberChecker.java
package com;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class PrimeCheckerTestCase {
@Before
public void initialize(){
primeNumberChecker=new PrimeNumberChecker();
System.out.println("in initialize");
}
@Parameterized.Parameters
public static Collection primeNumbers(){
System.out.println("In primeNumbers()");
return Arrays.asList(new Object[][]{
{2,true},
{6,false},
{19,true},
{22,false},
{23,true}
});
}//primeNumbers
@Test
public void testPrimeNumberChecker(){
System.out.println("parameterized No is:
"+inputNumber);
assertEquals(expectedResult,primeNumberChecker.val
idate(inputNumber));
}
}//class
25
[email protected]
PrimeTestRunner.java
package com;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
output:
In primeNumbers()
constructor
in initialize
parameterized No is: 2
constructor
in initialize
parameterized No is: 6
constructor
in initialize
parameterized No is: 19
constructor
in initialize
26
[email protected]
parameterized No is: 22
constructor
in initialize
parameterized No is: 23
true
Agile Methodology
Agility in Software Development :
1. Agile Model
2. Agile Development and Principles
Agile Software Development Methodologies :
▪ Stand-Up Meetings
2. Crystal
0. Crystal Clear
1. Crystal Orange
3. Scrum
0. Overview
1. Documents and Artifacts
2. Roles
3. Process
Introduction :
Agility in Software Development :
1. Agile Model
2. Agile Development and Principles
1. Extreme Programming
2. Crystal Methods
3. Scrum
4. Feature Driven Development
3. feedback
4. courage
5. respect
Roles
▪ Manager
▪ Coach
▪ Tracker
▪ Programmer
▪ Tester
▪ Customer
Process
primary technical practices of XP (13)
1. Sit together
2. Whole team
3. Informative workspace
4. Energized work
5. Pair programming
6. Stories
7. Weekly cycle
8. Quarterly cycle
9. Slack
10. Ten-minute build
11. Test-first programming
12. Continuous integration
13. Incremental design
corollary technical practices of XP (11)
Crystal Methods
Crystal Clear
1. Documents and artifacts
2. Roles
3. Process
Crystal Orange
1. Documents and artifacts
2. Roles
3. Process
Scrum
Overview
Documents and Artifacts
1. Product Backlog
2. Sprint Backlog
3. Sprint Burndown chart
Roles
▪ Product Owner
▪ Scrum Master
▪ Developer
Process
Feature Driven Development (FDD)
Documents and Artifacts
1. Feature lists
2. Design packages
3. Track by Feature
4. "Burn Up" Chart
Roles
▪ Project manager
▪ Chief architect
▪ Development manager
▪ Chief programmer
▪ Class owner
▪ Domain experts
▪ Feature teams
Process
1. Develop an overall model
2. Build a features list
3. Plan by feature
4. Design by feature
5. Build by feature
32