0% found this document useful (0 votes)
12 views

ST Lab Manual 8

ST lab manual 8

Uploaded by

Noor-Ul Ain
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

ST Lab Manual 8

ST lab manual 8

Uploaded by

Noor-Ul Ain
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 18

SOFTWARE TESTING

Experiment 06
Introduction to testing using Junit in
eclipse
Part (2)

CLO-2: Use modern tools to solve problems of varying


complexities in software testing.
CLO-3: Construct the projects of varying complexities using
different software testing techniques
CLO-4: Demonstrate a unique solution of problem under
discussion
1
2

1.JUnit Test Suite


Test suite means bundle a few unit test cases and run it together. In JUnit, both @RunWith
and@Suite annotation are used to run the suite test. Here is an example having two test classes
TestJunit1 & TestJunit2 to run together by using Test Suite.

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
}

b) Create Test Case Classes


Create a java class file name TestJunit1.java in C:\ > JUNIT_WORKSPACE

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 TestJunit2.java in C:\ > JUNIT_WORKSPACE


import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit2 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
4

c) Create Test Suite Class


 Create a java class.
 Attach @RunWith(Suite.class) Annotation with class.
 Add reference to Junit test classes using @Suite.SuiteClasses annotation

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

d) Create Test Runner Class


Create a java class file name TestRunner.java in C:\ > JUNIT_WORKSPACE to execute Test
case(s)

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

1- JUnit Ignore Test


Sometimes it happens that our code is not ready and test case written to test that
method/code will fail if run. The @Ignore annotation helps in this regards.
 A test method annotated with @Ignore will not be executed.

 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());
}
}

b)Create Test Case Class


 Create a java test class say TestJunit.java.
 Add a test methods testPrintMessage(),testSalutationMessage() to your test class.
 Add an Annotaion @Ignore to method testPrintMessage().
Create a java class file name TestJunit.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
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
7

b) Create Test Runner Class


Create a java class file name TestRunner.java in C:\ >
JUNIT_WORKSPACE to execute Test case(s)
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(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}

Result should be
Inside testSalutationMessage()
Hi!Robert
True

3.Ignoring All Test cases


Now update TestJunit in C:\ > JUNIT_WORKSPACE to ignore all test
cases. Add @Ignore at class level.
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);
8
@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());
}
}
Now run the Test Runner which will not run any test case defined in
provided Test Case class.
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(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Verify the output. No test case is tested.

Result should be
True
9

4-JUnit Time Test


Junit provides a handy option of Timeout. If a test case takes more time than specified number of
milliseconds then Junit will automatically mark it as failed. The timeout parameter is used along
with @Test annotation.

a) Create a Class
 Create a java class to be tested say MessageUtil.java in C:\ > JUNIT_WORKSPACE.

 Add a infinite while loop inside printMessage() method.

/*
* 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

b) Create Test Case Class


 Create a java test class say TestJunit.java.
 Add timeout of 1000 to testPrintMessage() test case.
Create a java class file name TestJunit.java in C:\ > JUNIT_WORKSPACE

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());
}
}

c) Create Test Runner Class


Create a java class file name TestRunner.java in C:\ > JUNIT_WORKSPACE to execute Test
case(s)

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
11

public class TestRunner {


public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}

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

5. JUnit Exception Test


Junit provides an option of tracing the Exception handling of code. You can test the code whether
code throws desired exception or not. The expected parameter is used along with @Test
annotation. Now let's see @Test(expected) in action.

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;
}
}

b)Create Test Case Class


 Create a java test class say TestJunit.java.
 Add expected exception ArithmeticException to testPrintMessage() test case.
Create a java class file name TestJunit.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);
@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());
}}

c) Create Test Runner Class


Create a java class file name TestRunner.java in C:\ > JUNIT_WORKSPACE to execute

Test case(s)
 Now run the Test Runner which will run test cases defined in provided Test Case class.
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(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}

Verify the output. testPrintMessage() test case will be passed.

Result should be
Inside testSalutationMessage()
Hi!Robert
Inside testPrintMessage()
Robert
True
14

6.JUnit Parameterized Test


JUnit 4 has introduced a new feature Parameterized tests. Parameterized tests allow
developer to run the same test over and over again using different values. There are five
steps, that you need to follow to create Parameterized tests.
 Annotate test class with @RunWith(Parameterized.class)
 Create a public static method annotated with @Parameters that returns a Collection of
Objects (as Array) as test data set.
 Create a public constructor that takes in what is equivalent to one "row" of test data.
 Create an instance variable for each "column" of test data.
 Create your tests case(s) using the instance variables as the source of the test data.
The test case will be invoked once per each row of data. Let's see Parameterized tests in
action.

a) Create a Class
Create a java class to be tested say PrimeNumberChecker.java in C:\ > JUNIT_WORKSPACE

public class PrimeNumberChecker {


public Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}

b) Create Parameterized Test Case Class


 Create a java test class say PrimeNumberCheckerTest.java.
 Create a java class file name PrimeNumberCheckerTest.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));
}
}

c) Create Test Runner Class


Create a java class file name TestRunner.java in C:\ >
JUNIT_WORKSPACE to execute Test case(s)
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner3 {
public static void main(String[] args) {
Result result =
JUnitCore.runClasses(PrimeNumberCheckerTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Now run the Test Runner which will run test cases defined in
provided Test Case class.

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.

public class Fibonacci {


public static int compute(int n) {
int result = 0;

if (n <= 1) {
result = n;
} else {
result = compute(n - 1) + compute(n - 2);
}

return result;
}
}

You might also like