ST Lab Manual 8
ST Lab Manual 8
Experiment 06
Introduction to testing using Junit in
eclipse
Part (2)
a) Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > JUNIT_WORKSPACE
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message)
{
this.message = message;
}
// prints the message
public String printMessage()
{
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage()
{
message = "Hi!" + message;
System.out.println(message);
return message;
}
3
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit1 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message, messageUtil.printMessage());
}
}
Create a java class file name TestSuite.java in C:\ > JUNIT_WORKSPACE to execute Test case(s)
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class,
TestJunit2.class
})
public class JunitTestSuite {
}
Result should be
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result =
JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
5
System.out.println(result.wasSuccessful());
}}
Result should be
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
True
If a test class is annotated with @Ignore then none of its test methods will be executed.
a) Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > JUNIT_WORKSPACE
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Ignore
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
6
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Ignore
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
7
Result should be
Inside testSalutationMessage()
Hi!Robert
True
Result should be
True
9
a) Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > JUNIT_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message)
{
this.message = message;
}
// prints the message
public void printMessage()
{
System.out.println(message);
while(true);
}
// add "Hi!" to the message
public String salutationMessage()
{
message = "Hi!" + message;
System.out.println(message);
return message; }
}
10
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
@Ignore
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test (timeout=1000)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
11
Now run the Test Runner which will run test cases defined in provided Test Case class.
Verify the output. testPrintMessage() test case will mark unit testing failed.
Result should be
Hi!Robert
testPrintMessage(lab3package.TestJunit): Unresolved compilation
problem:
The method assertEquals(Object, Object) in the type Assert is not
applicable for the arguments (String, void)
False
a) Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > JUNIT_WORKSPACE.
Add an error condition inside printMessage() method. Create Test Case Class
/*
* This class prints the given message on console.
*/
public class MessageUtil {
12
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public void printMessage(){
System.out.println(message);
int a =0;
int b = 1/a;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test(expected = ArithmeticException.class)
public void testPrintMessage() {
13
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}}
Result should be
Inside testSalutationMessage()
Hi!Robert
Inside testPrintMessage()
Robert
True
14
a) Create a Class
Create a java class to be tested say PrimeNumberChecker.java in C:\ > JUNIT_WORKSPACE
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.runners.Parameterized;
15
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
private Integer inputNumber;
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
// from parameters we defined in primeNumbers() method
public PrimeNumberCheckerTest(Integer inputNumber,
Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}
@Test
16
public void testPrimeNumberChecker() {
System.out.println("Parameterized Number is : " +
inputNumber);
assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
Result should be
Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
True
17
Lab Task: Implement the Parameterized tests for the following program.
Fibonacci series a series of numbers in which each number ( Fibonacci number ) is the
sum of the two preceding numbers. The simplest is the series 1, 1, 2, 3, 5, 8, etc.
if (n <= 1) {
result = n;
} else {
result = compute(n - 1) + compute(n - 2);
}
return result;
}
}