SlideShare a Scribd company logo
1 of 20
Download to read offline
JUnitwithMocking
Mr. Zeeshan
Email:zeeshan.maths@gmail.com
Junit with Mockito Mr. Zeeshan
1 | P a g e
JUnitisan open sourceframework, developedinitiallybyErich Gamma and Kent Beck.Itismainlyused
by Java developers to write unit test cases.
Before discussing JUnit in detail, it is imperative to understand Software Testing Terminology.
Software Testing: Software Testingisthe process of identifying the correctness and qualityof software
program. The purpose is to check whether the software satisfies the specific requirements, needs and
expectations of the customer/client. In other words, testing is executing a system or application in order
tofind software bugs,defectsorerrors. The jobof testingis tofindout the reasons of application
failures so that they can be corrected according to customer/client requirements.
Example: Car manufacturer tests the car for maximum speed, fuel efficiency and safety from crash.
These test results later become the part of advertising strategy for car sales.
When we are developing software projects, there can be many reasons for defects in that software. The
developercanalsomakeanerrorwhichmayresultinadefectorbuginthesoftwaresourcecode.Any
defectorbuginthesoftwarewillproducewrongresultscausingafailure.Whenabugordefectcauses
in software application, testing is done to find out the cause of defect and to remove the bug.
Aspartofsoftwaredevelopmentifbugintroduced,ithastoberectifiedsothatitdoesnotdisruptsthe
wholeprocessofsoftwareprogram.Thatrectifiedpartisagaintestedtoconfirmthatitiscompatible
with the rest of program.
Most common software problems are:
Incorrect implementation of the business rules
Weak software performance
Incorrect results of data searches
Incorrect matching ofdata
Inadequate security controls
Confusing or misleadingdata
Incorrect file handling,etc.
Ways of Software Testing: Software Testing can be performed in below 2 ways.
1. Manual Testing: Test Cases executed manually.
2. Automation Testing: Testing performed with the help of automation tools.
Inmanualtestingthetesterhastheroleoftheend-userandtrytofindbugsorwrongbehaviorofthe
software.
Manual testing has some stages/levels as:
1) Unit Testing: It should examine the behavior of a distinct unit of work, like checking methods in
classes by writing test cases.
2) Integration Testing: It should examine the interaction between components in their target
environment.
Junit with Mockito Mr. Zeeshan
2 | P a g e
3) FunctionalTesting:Itshouldtesttheapplicationusecases.Functionaltestingisatypeofblack
box testing that bases its test cases on the specifications of the software component under test,
and as such, should require no knowledge of the inner design of the code or logic.
4) Stress/loadTesting(PerformanceTesting):Itshouldtesttheperformanceoftheapplication.
Without performance testing, software is likely to suffer from issues such as: running slow while
severalusersuseitsimultaneously,inconsistenciesacrossdifferentoperatingsystemsandpoor
usability.Performancetestingwilldeterminewhetherornottheirsoftwaremeetsspeed,scalability
and stability requirements under expected workloads.
5) AcceptanceTesting:Itshouldensurethat theapplicationhasmetthe customer'sgoal.
Automationtestingrequiresthatthetesterwritescriptsanduseothersoftwaretotestthedeveloped
software. The test scenarios performed manually are run more times very quickly.
Aspartofthismaterial,wewillunderstandwhatisUnittesting&howtoperformUnittestingusing
Junit and EasyMockframeworks.
What is Unit Testing?
Aspartofapplicationdevelopmentprocess,Coding(or)Implementationofmodule/taskisdoneby
developers.After Codingiscompletedit willbesubmittedtoTesting Team(QA=Quality Analysis Team)
totestapplicationfunctionality.QATeamwillperformdifferenttypesorlevelsoftesting.Butbefore
submittingcodetoQAteam,ifDevelopersperformsIndividualtasks/modulestestingthenErrors
(BUGs) rate will be reduced in Application.
Inordertoreducetheprojectsinproject,programmer/developercannottestthecompleteproject,
he/shecantestonlyhis/hermoduleortaskthathe/shedeveloped.Thisprocessoftestinghis/her
module or task is called as Unit testing. Here Unit indicates a class, method, one layer, one module etc.
Unit Testing is a level of software testing where individual units/ components of a software application
are tested.
Themainobjectiveofunittestingistosplitcodeintomultiplepiecesandtesteachpieceofcode
separately to ensure that, it works as expected.
Unittestingisusedtoverifyasmallchunkofcodebycreatingapath,functionoramethod.Theterm
"unit"existearlierthantheobject-orientedera.Itisbasicallyanaturalabstractionofanobjectoriented
system i.e. a java class or object (its instantiated form).
Junit with Mockito Mr. Zeeshan
3 | P a g e
JUnit ispackaged asa single JAR file, itbasically have alibraryoffunctionality which makeseasierfora
developer to create unit test in Java and verify the results of those tests.
Why to do Unit Testing? Why it is important?
Unit testing is used to identify defects early in software development cycle.
Unittestingwillcompeltoreadourowncode.I.e.adeveloperstartsspendingmoretimein
reading than writing.
Defects in the design of code affectthe development system. A successful code breeds the
confidence of developer.
Properunittestingdoneduringthedevelopmentstagesavesbothtimeandmoneyintheend.
Unit testing of software applications is done during the development (coding) of an application. Unit
testing is usually performed by the developer.
Types of unit testing: There are two ways to perform unit testing
1. Manual testing
2. Automated testing.
Manual Testing: Manual Testing is used to test the program or application manually (means without
using any additionaltool)
Automated Testing:
tools
What is JUnit
JUnitisthemostpopularunittestingframeworkinJava.Itisusefulforjavadeveloperstowriteandrun
repeatabletests.ItisaninstanceofxUnitarchitecture.Asthenameimplies,itisusedforunittestingof
a small chunk of code.
JUnit Features
JUnit is an open source framework which is used for writing & running tests.
Provides Annotation to identify the test methods.
Provides Assertions for testing expected results.
Provides Test runners for running tests.
JUnit tests allow you to write code faster which increasing quality
JUnit is elegantly simple. It is less complex & takes less time.
JUnit tests can be run automatically and they check their own results and provide immediate
feedback. There's no need to manually comb through a report of test results.
JUnittestscanbeorganizedintotestsuitescontainingtestcasesandevenothertestsuites.
Junitshowstestprogressinabarthatisgreeniftestisgoingfineanditturnsredwhenatest
fails.
JUnit Framework
JUnitisthemostpopularunittestingframeworkinJava.Itisexplicitlyrecommendedforunittesting.
JUnitdoesnotrequireserverfortestingwebapplication,whichmakesthetestingprocessfast.
JUnit framework also allows quick and easy generation of test cases and test data.
Theorg.JunitpackageconsistofmanyinterfacesandclassesforJUnittestingsuchasTest,Assert,After,
Before, etc.
Automation testing is a process of testing an application by using some software
Junit with Mockito Mr. Zeeshan
4 | P a g e
URL to download JUnit Framework: http://www.junit.org/
Using JUnit with Maven
To use JUnit in Maven project, add the following dependency in pom.xml file.
Let’s move on to implement first JUnit program. Components required for developing JUnit program are
Test Fixture: A test fixture is a context where a test case runs.
Typically, test fixtures include:
Setup and Teardown
Usually, there are some repeated tasks that must be done prior to each test case.
Example: create a database connection.
Likewise, at the end of each test case, there may be some repeated tasks.
Example: to clean up once test execution is over.
JUnit provides annotations that help in setup and teardown. It ensures that resources are released, and
the test system is in a ready state for next test case.
These annotations are discussed below-
Setup: @Before annotation is used on a method containing java code to run before each test case. i.e it
runs before each test execution.
 Objects or resources that are available for any test case.
 Activities required that makes these objects/resources available.
 These activities are
 allocation (setup)
 De-allocation (teardown).
Junit with Mockito Mr. Zeeshan
5 | P a g e
Teardown: @After annotation is used on a method containing java code to run after each test case.
Thesemethodswillrunevenifanyexceptionsarethrowninthetestcaseorinthecaseofassertion
failures.
JUnit Test Suites
TestSuitesareusedtoexecutemultipletestsinaspecifiedorder,itcanbedonebycombiningallthe
tests in one place. This place is called as the test suites
Junit Test Runner
First JUnit program
Toexecuteourtestmethod(above),weneedtocreateatestrunner.Inthetestrunnerwehavetoadd
test class as a parameter in JUnitCore's runclasses() method . It will return the test result, based on
whether the test is passed or failed.
Let'sunderstandunittestingusingbelowexample.Weneedtocreateatestclasswithatestmethod
annotated with @Test as given below:
JUnit Test Runner is used to execute our test cases.
 JUnitCore class is used to execute these tests.
 A method called runClasses provided by org.junit.runner.JUnitCore, is used to run one or several
test classes.
 ReturntypeofthismethodistheResultobject(org.junit.runner.Result),whichisusedtoaccess
information about the tests. See following code example for more clarity.

In above code "result" object is processed to get failures and successful outcomes of test cases we are
executing.
Junit with Mockito Mr. Zeeshan
6 | P a g e
JUnit API
JUnitAPIincludesvariousclassesandannotationstowriteatestcase. Seebelowclasseswhich arevery
useful while writing a test case
1. voidassertEquals(booleanexpected,booleanactual): Itcheckswhethertwovaluesareequals
2. voidassertFalse(booleancondition):"assertSame"functionalityistocheckthatthetwoobjects
refer to the same object.
3. void assertNotNull(Object object):
4. voidassertNull(Objectobject):"assertNull"functionalityistocheckthatanobjectisnull.
5. void assertTrue(boolean condition) : "assertTrue" functionality is to checkthat a condition is
6. voidfail():If youwanttothrowanyassertionerror,youhavefail()thatalwaysresultsin afail
verdict.
7. void assertSame([String message] : "assertSame" functionality is to check that the twoobjects
8. voidassertNotSame([String message]:"assertNotSame"functionalityistocheckthatthetwo
objects do not refer to the same object.
JUnit TestCase Class
Torunmultipletests,TestCaseclassisavailableinorg.junit.TestCasepackages.Annotation@Testtells
JUnitthatthispublicvoidmethod(TestCasehere)towhichitisattachedcanberunasatestcase.
Below table shows some important methods available in org.junit.TestCase class:
refertothesameobject.
true.
null.
similar to equals method of Object class
1. org.junit.Assert
2. org.junit.TestCase
3. org.junit.TestResult
4. org.junit.TestSuite
JUnit Assert Class
This class provides a bunch of assertion methods useful in writing a test case. If all assert statements are
passed,testresultsaresuccessful.Ifanyassertstatementfails,testresultsarefailed.Belowarethe
Assert methods anddescription
Once TestRunner.java executes ourtestmethods wegetoutput injunitconsole asfailed orpassed.
"assertNotNull"functionalityistocheckthatanobjectisnot
Junit with Mockito Mr. Zeeshan
7 | P a g e
Torunmultipletest,TestCaseclassisavailableinorg.junit.TestCasepackages.Annotation@Testtells
JUnitthatthispublicvoidmethod(TestCasehere)towhichitisattachedcanberunasatestcase
1. intcountTestCases() :Thismethodisusedtocounthowmanynumberoftestcasesexecuted
by run(TestResult tr)method.
2. TestResult createResult() : This method is used to create a TestResult object.
3. String getName() : This method returns a string which is nothing but a TestCase.
4. TestResultrun():ThismethodisusedtoexecuteatestwhichreturnsaTestResultobject
5. voidrun(TestResultresult):ThismethodisusedtoexecuteatesthavingaTestResultobject
whichdoesn't returns anything.
6. void setName(Stringname) : Thismethod isused to set a name of aTestCase.
7. voidsetUp():Thismethodisusedtowriteresourceassociationcode.e.g.Createadatabase
connection.
8. voidtearDown():Thismethodisusedtowriteresourcereleasecode.e.g.Releasedatabase
connection after performing transaction operation.
9. @Test : Test annotation is the creation of Test case to already developed project is known as
Test.
1. voidaddError(Testtest,Throwablet):Thismethodisusedifyourequireaddanerrortothe
test.
2. voidaddFailure(Testtest,AssertionFailedErrort):Thismethodisusedifyourequireadda
failure to the list of failures.
3. voidendTest(Testtest):Thismethodisusedtonotifythatatestisperformed(completed)
4. int errorCount() : Thismethod isused to get the errordetected during test execution.
5. Enumeration<TestFailure> errors() : This method simply returns a collection (Enumeration here)
of errors.
6. int failureCount() : This method is used to get the count of errors detected during test
execution.
7. voidrun(TestCasetest) : This method is used to execute a test case.
8. int runCount(): This method simply counts the executed test.
9. void startTest(Test test) : This method is used to notify that a test is started.
10. void stop() : This method is used to test run to be stopped.
JUnit Annotations
Annotations were introduced in Junit4, which makes java code more readable and simple. This is the big
difference between Junit3 and Junit4 , that Junit4 is annotation based. With the knowledge of
annotations in Junit4, one can easily learn and implement a JUnit test.
Below is the list of important and frequently used annotations:
1. @Test : This annotation isa replacement of org.junit.TestCase which indicates that public void
method to which it is attached can be executed as a test Case.
2. @Before: This annotation is used if we want to execute some statement such as preconditions
before each testcase.
3. @BeforeClass: This annotationis used if we want to execute some statements before allthe
test cases for e.g. test connection must be executed before all the test cases.
JUnit TestResult Class
When you execute a test, it returns a result (in the form of TestResult object). This TestResult object can
beusedtoanalyzetheresultantobject.Thistestresultcanbeeitherfailureorsuccessful.Seebelow
table for important methods used in org.junit.TestResult class:
Junit with Mockito Mr. Zeeshan
8 | P a g e
4. @After : This annotation can be used if we want to execute some statements after each test
case for e.g resetting variables, deleting temporary files ,variables, etc.
5. @AfterClass:Thisannotationcanbeusedifwewanttoexecutesomestatementsafteralltest
cases for e.g. Releasing resources after executing all test cases.
6. @Ignores:Thisannotationcanbeusedifwewanttoignoresomestatementsduringtestexecutionfor
e.g. disabling some test cases during test execution.
7. @Test(timeout=500) : This annotation can be used if we want to set some timeout during test execution
fore.g.ifyouareworkingundersomeSLA(Servicelevelagreement),andtestsneedtobecompleted
within some specifiedtime.
8. @Test(expected=IllegalArgumentException.class) :This annotation can be used if we want to handle
someexceptionduringtestexecution.For,e.g.,ifyouwanttocheckwhetheraparticularmethodis
throwing specified exception or not.
JUnit Annotations Example
Let's create a class covering important JUnit annotations with simple print statements and execute it
with a test runner class:
Step1)Considerbelowjavaclasshavingvariousmethodswhichareattachedtoabove-listed
annotations:
Step 2) let's create a test runner class to execute above test:
Junit with Mockito Mr. Zeeshan
9 | P a g e
Consider businessMethod( ) as given below : (Adding one object to list)
In above method as we are adding a string in the variable "list" so
list.isEmpty() will returnfalse.
assertFalse(list.isEmpty()) must return true : Asa result, the test case will pass.
As we have added only one obj in the list, so the size of the list is 1
list.size() must return int value as "1" .
So assertEquals(1,list.size())must returntrue :Asa result,thetestcase willpass.
Example 1: In this example we will perform unit testing on Calculator class (Business class).
Step1: Create a maven project
Step 2: Create Calculator.java class like below
Intheabovesourcecode,wecannoticethattheclasshastwopublicmethodsnamedsum()&mul(),
both methods gets as inputs two integers, and performs calculation returns the result. Below, there is
the code of the class named TestCalculator.java, which has the role of our test class:
Junit with Mockito Mr. Zeeshan
10 | P a g e
Step 3: Create TestCalculator.java like below
Explanation: Firstly,wecanseethatthereisa@TestannotationabovethetestSum()&testMul()
methods.Thisannotationindicatesthatthepublicvoidmethodtowhichitisattachedcanberunasa
testcase.Hence,thetestSum()methodisthemethodthatwilltestthesum()publicmethod.Wecan
also observe a method called assertEquals(sum, testsum). The method assertEquals ([String message],
object expected, object actual) takes as inputs two objects and asserts that the two objects are equal.
Step 4: Create TestRunner class
ExecuteaboveTestRunnerclass,byright-clickingintheTestRunnerclassandselectRunAs->JunitTest.
Example 2: In this example, we will test Database connections using SingleConnectionProvider.java class
Junit with Mockito Mr. Zeeshan
11 | P a g e
Explanation:WhenwerunthisTestRunner.javaclass,itwillexecutetestGetConnection()method,inthis
we are checking weather it is giving same connection object or different connection object. As
SingleConnectionProvider.java is not singleton class, always it will return new connection object hence
our test case is going to failure. Output will be displayed like below in console.
Example 3: In this example we will test user login functionality with database.
Step1: In order to test our dao and service classes’ login functionality, create a database table and insert
some sample data using below queries.
Junit with Mockito Mr. Zeeshan
12 | P a g e
After executing above queries, our USER_MASTER table will have the data like below
Step 2: Create UserDao.java class to execute database query like below
Note:AsweareusingOracledatabase,needtoaddojdbc14.jar/ojdbc6.jar inprojectbuildpathifitismaven
projectaddtheojdbc14/ojdbc6jarrelateddependencyinpom.xmlfilealongwithjunitdependencylikebelow
Junit with Mockito Mr. Zeeshan
13 | P a g e
Step 3: Create LoginService.java: to call UserDao class method to load user record.
Step 3: Create LoginServiceTest.java to test login( ) method functionality.
Step 4 : Create TestRunner.java class like below to execute the test case and run this class.
Using @ ignore annotation with Condition
Let'staketheexampleof howtoignoreatestanddefinethereasonforignoringalongwithit.As
discussed above, to provide a reason you have one optional parameter in @ignore annotation where
you can provide the reason statement.
Junit with Mockito Mr. Zeeshan
14 | P a g e
Mocking
Aspartoftheapplicationdevelopment,thecodewewritehasanetworkof interdependencies,it may
callintothemethodsofseveralotherclasseswhichinturnmaycallyetothermethods;indeedthisisthe
intentandpowerofobjectorientedprogramming.Usuallyatthesametimeaswritingourfeaturecode
we will also write test code in the form of automated unit tests. We use these unit tests to verify the
behavior of our code, to ensure that it behaves as we expect it to behave.
Whenweunittestourcodewe wanttotestitinisolationandwewanttotestitfast.Forthepurposesof
theunittestweonlycareaboutverifyingourowncode,inthecurrentclassundertest.Generallywealso
want to execute our unit tests very regularly, perhaps more than several times per hour when we are
refactoring and we are working in our continuous integration environment.
Thisiswhenallourinterdependenciesbecomeanissue.Wemightendupexecutingcodeinanotherclass
thathasabugthatcausesourunittesttofail.Imagineaclasswhichweusetoreaduserdetailsfroma
database,whathappensifthere’snodatabasepresentwhenwewanttorunourunittests?Imaginea
classwhichcallsseveralremotewebservices,whatifthey’redownortakealongtimetorespond?Our
unit tests could fail due to our dependencies and not because of some issue with the behavior of our
code. This isundesirable.
In addition to this, it might be very difficult to force a specific event or error condition that we want to
ensureourcodehandlescorrectly.Whatifwewanttotestthatsomeclasswhichdeserializeanobject
handles a possible ObjectStreamException properly? What if we want to test all boundary return values
from a collaborator? What about ensuring that some calculated value is passed correctly to a
collaborator?Itmight take alot of codingand a longtimeto replicate theconditionsforourtests,if it is
even possible atall.
All these issues simply disappear if we use mocks. Mocks act like a substitute for the classes with which
wearecollaborating,theytaketheirplaceandbehaveexactlyhowwetellthemtobehave.Mocksletus
pretendthatourrealcollaboratorsarethere,eventhoughtheyaren’t.Moreimportantlymockscanbe
programmed to return whatever values we want and confirm whatever values are passed to them. Mocks
execute instantly and don’t require any external resources. Mocks will return what we tell them to return,
throwwhateverexceptionswewantthemtothrowandwilldothesethingsoverandover,ondemand.
They let us test only the behavior of our own code, to ensure that our class works, regardless of the
behavior of itscollaborators.
There are several mocking frameworks available for Java, each have their own syntax, their own
strengths, their own weaknesses.
Introduction to the EasyMock framework: EasyMock is a mocking framework, JAVA-based library that is
usedforeffectiveunittestingofJAVAapplications.EasyMockisusedtomockinterfacessothata
dummy functionality can be added to a mock interface that can be used in unit testing.
Before we begin, let’s first understand the need behind using EasyMock. Let’s say, you are building an
enterprise application for maintaining user’s stock portfolios. Your application would use a stock market
service to retrieve stock prices from a real server (such as NASDAQ).
Junit with Mockito Mr. Zeeshan
15 | P a g e
To make it clear, have a look at the below code snippet
 In the first line, we ask the EasyMock to create a mock object for our IWeatherForeCastor
interface.
 Andtheninthesecondline,wedefinehowthismockobjectshouldbehave -i.e.,whenthe
getTemperature (long zipcode) method is called with the parameter 500081’, the mock should
return 42.14.
 And then, we call the replay () method, to make the mock object ready to use.
Example: Let’sdevelopour WeatherForeCastor ApplicationtogetTemperatureDetailsusingzipcode
(Below are the sample screens)
When it comes to testing your code, you wouldn’t want to hit the real stock market server for fetching
thestockprices.Instead,youwouldlikesomedummypricevalues.So,youneedtomockthestockmarket
service that returns dummy values without hitting the real server.
EasyMock is exactly doing the same - helps you to mock interfaces. You can pre-define the behavior of
yourmockobjectsand thenusethismockobjectin yourcodefortesting.Because,youareonly
concerned about testing your logic and not the external services or objects. So, it makes sense mock the
external services using Easy Mock.
As per above Part-1 diagram,
1: Client will access the application and Enters Zip Code and clicks on ‘Get Temperature’ button
2: Client Request will be received by WeatherController.java and it captures zipcode from request
Junit with Mockito Mr. Zeeshan
16 | P a g e
3: Controller Hits WeatherService.java class to process business logic
Here our WeatherService.java class, don’t know the Temperature Details. Temperature details we have to get
fromaWebservicewhichwasexposedbyothercompany(ThatWebServicewilltalktoaDeviceandthat
Device will connect with Satellites to get the Temperature Details).
As per above Part-2 diagram,
1: When someone tries to consume this WebService, it will talk to a Device (which is connected with Satellites)
2: Device will connect with Satellite to get Temperature Details
3: Device capture Temperature details from Satellite and return response to Webservice
4: Webservice will return temperature details as a response to Consumer (i.e. Our WeatherService.java class)
OnceWebServicereturntheResponsetoourWeatherService.javaclass,ourServicewilldofurther
business logic processing andreturns final response to Controller.
Intheaboveprocess,ifWebServiceisupandrunningthenwecancomplete unittestingofourService
class method which will retrieve Temperature details and do further processing to return final details
to Controller classmethod.
If above mentioned WebService is down, we can’t perform Unit testing for our Service class method.
DoweneedtowaitforWebServiceavailabilitytotestourpieceofcode?theAnswerforthisisNO
because we don’t know when that Webservice will be up and running So instead of waiting for that
WebService to be available wecan use EasyMock to mock that Service with dummy implementation
to complete our Unit Testing.
Below example depicts the same..
Junit with Mockito Mr. Zeeshan
17 | P a g e
Add below 2 dependencies in pom.xml file to work with Junit and EasyMock
Step2: Create IWeatherForeCastor.java (it contains getTemperature ( ) method).
Step1: Create a standalone maven project like below using quick-start archetype
Step3:createWeatherForeCastorService.java (Thisclassmethodprovidestemperaturebasedongiven
zipcode.Itinteracts withIBMForeCastor whichisimplementation forIWeatherForeCastor.java interface)
Junit with Mockito Mr. Zeeshan
18 | P a g e
Step 3: Create TestWeatherForecastService.java
Testing Portfolio application using JUnit and EasyMock
Step4: Execute TestWeatherForeCastorService.java as JunitTest app
Junit with Mockito Mr. Zeeshan
19 | P a g e
EasyMock.replay(marketMock);
So, here after our mock object’s getTemperature ( ) method would return 42.14 when called with 500081.
===000===
As we can see in above code, during setUp() we are creating new WeatherForeCastorService object.
Then we ask EasyMock to create a mock object for the IWeatherForeCastor interface. Then we inject
thismockobjectintoourWeatherForeCastorServiceobjectusingservice.setIbmForeCastor()method.
In the @Test method, we define how our mock object should behave when called, using the below code:
EasyMock.expect(ibmForeCastor.getTemperatur(500081).andReturn(42.14);

More Related Content

What's hot

A survey of software testing
A survey of software testingA survey of software testing
A survey of software testingTao He
 
Unit Testing & TDD Training for Mobile Apps
Unit Testing & TDD Training for Mobile AppsUnit Testing & TDD Training for Mobile Apps
Unit Testing & TDD Training for Mobile AppsMarcelo Busico
 
Unit testing and junit
Unit testing and junitUnit testing and junit
Unit testing and junitÖmer Taşkın
 
SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)Amr E. Mohamed
 
Manual software-testing-interview-questions-with-answers
Manual software-testing-interview-questions-with-answersManual software-testing-interview-questions-with-answers
Manual software-testing-interview-questions-with-answersSachin Gupta
 
Ch8-Software Engineering 9
Ch8-Software Engineering 9Ch8-Software Engineering 9
Ch8-Software Engineering 9Ian Sommerville
 
Short definitions of all testing types
Short definitions of all testing typesShort definitions of all testing types
Short definitions of all testing typesGaruda Trainings
 
ISTQB - Foundation level testing topics
ISTQB - Foundation level testing topicsISTQB - Foundation level testing topics
ISTQB - Foundation level testing topicsShan Kings
 
Chapter 4 - Deployment & Delivery
Chapter 4 - Deployment & DeliveryChapter 4 - Deployment & Delivery
Chapter 4 - Deployment & DeliveryNeeraj Kumar Singh
 
Software techniques
Software techniquesSoftware techniques
Software techniqueshome
 
Unit testing - what is its importance
Unit testing - what is its importanceUnit testing - what is its importance
Unit testing - what is its importanceTestingXperts
 
Automated testing-whitepaper
Automated testing-whitepaperAutomated testing-whitepaper
Automated testing-whitepaperimdurgesh
 
QTP Tutorial
QTP TutorialQTP Tutorial
QTP Tutorialpingkapil
 
SOFTWARE ENGINEERING UNIT 6 Ch 13
SOFTWARE ENGINEERING UNIT 6 Ch 13SOFTWARE ENGINEERING UNIT 6 Ch 13
SOFTWARE ENGINEERING UNIT 6 Ch 13Azhar Shaik
 

What's hot (19)

A survey of software testing
A survey of software testingA survey of software testing
A survey of software testing
 
Unit Testing & TDD Training for Mobile Apps
Unit Testing & TDD Training for Mobile AppsUnit Testing & TDD Training for Mobile Apps
Unit Testing & TDD Training for Mobile Apps
 
Test plan
Test planTest plan
Test plan
 
Unit testing and junit
Unit testing and junitUnit testing and junit
Unit testing and junit
 
SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)
 
Manual software-testing-interview-questions-with-answers
Manual software-testing-interview-questions-with-answersManual software-testing-interview-questions-with-answers
Manual software-testing-interview-questions-with-answers
 
Testing ppt
Testing pptTesting ppt
Testing ppt
 
Unit testing
Unit testingUnit testing
Unit testing
 
Ch8-Software Engineering 9
Ch8-Software Engineering 9Ch8-Software Engineering 9
Ch8-Software Engineering 9
 
Short definitions of all testing types
Short definitions of all testing typesShort definitions of all testing types
Short definitions of all testing types
 
Ka3517391743
Ka3517391743Ka3517391743
Ka3517391743
 
ISTQB - Foundation level testing topics
ISTQB - Foundation level testing topicsISTQB - Foundation level testing topics
ISTQB - Foundation level testing topics
 
Chapter 4 - Deployment & Delivery
Chapter 4 - Deployment & DeliveryChapter 4 - Deployment & Delivery
Chapter 4 - Deployment & Delivery
 
Software techniques
Software techniquesSoftware techniques
Software techniques
 
nullcon 2011 - Fuzzing with Complexities
nullcon 2011 - Fuzzing with Complexitiesnullcon 2011 - Fuzzing with Complexities
nullcon 2011 - Fuzzing with Complexities
 
Unit testing - what is its importance
Unit testing - what is its importanceUnit testing - what is its importance
Unit testing - what is its importance
 
Automated testing-whitepaper
Automated testing-whitepaperAutomated testing-whitepaper
Automated testing-whitepaper
 
QTP Tutorial
QTP TutorialQTP Tutorial
QTP Tutorial
 
SOFTWARE ENGINEERING UNIT 6 Ch 13
SOFTWARE ENGINEERING UNIT 6 Ch 13SOFTWARE ENGINEERING UNIT 6 Ch 13
SOFTWARE ENGINEERING UNIT 6 Ch 13
 

Similar to JUnit with_mocking

Software Testing - A sneak preview By Srikanth
Software Testing - A sneak preview By SrikanthSoftware Testing - A sneak preview By Srikanth
Software Testing - A sneak preview By SrikanthSrikanth Krishnamoorthy
 
Automation testing & Unit testing
Automation testing & Unit testingAutomation testing & Unit testing
Automation testing & Unit testingKapil Rajpurohit
 
Software Testing
Software TestingSoftware Testing
Software TestingSengu Msc
 
Types of software testing
Types of software testingTypes of software testing
Types of software testingTestbytes
 
Junit Interview Questions-ppt
Junit Interview Questions-pptJunit Interview Questions-ppt
Junit Interview Questions-pptMayank Kumar
 
Object Oriented Testing(OOT) presentation slides
Object Oriented Testing(OOT) presentation slidesObject Oriented Testing(OOT) presentation slides
Object Oriented Testing(OOT) presentation slidesPunjab University
 
Software testing
Software testingSoftware testing
Software testingSengu Msc
 
Software testing
Software testingSoftware testing
Software testingSengu Msc
 
Introduction to software testing
Introduction to software testingIntroduction to software testing
Introduction to software testingVenkat Alagarsamy
 
5 Best Unit Test Frameworks to Automate Unit Tests
5 Best Unit Test Frameworks to Automate Unit Tests5 Best Unit Test Frameworks to Automate Unit Tests
5 Best Unit Test Frameworks to Automate Unit TestsSerena Gray
 
How to Make the Most of Regression and Unit Testing.pdf
How to Make the Most of Regression and Unit Testing.pdfHow to Make the Most of Regression and Unit Testing.pdf
How to Make the Most of Regression and Unit Testing.pdfAbhay Kumar
 
unittesting-190620114546 (1).pptx document
unittesting-190620114546 (1).pptx documentunittesting-190620114546 (1).pptx document
unittesting-190620114546 (1).pptx documentAkshayaM79
 
Introduction To UnitTesting & JUnit
Introduction To UnitTesting & JUnitIntroduction To UnitTesting & JUnit
Introduction To UnitTesting & JUnitMindfire Solutions
 

Similar to JUnit with_mocking (20)

Software Testing - A sneak preview By Srikanth
Software Testing - A sneak preview By SrikanthSoftware Testing - A sneak preview By Srikanth
Software Testing - A sneak preview By Srikanth
 
Automation testing & Unit testing
Automation testing & Unit testingAutomation testing & Unit testing
Automation testing & Unit testing
 
Software Testing
Software TestingSoftware Testing
Software Testing
 
Software testing
Software testingSoftware testing
Software testing
 
Types of software testing
Types of software testingTypes of software testing
Types of software testing
 
Junit Interview Questions-ppt
Junit Interview Questions-pptJunit Interview Questions-ppt
Junit Interview Questions-ppt
 
Software engg unit 4
Software engg unit 4 Software engg unit 4
Software engg unit 4
 
TDD Workshop UTN 2012
TDD Workshop UTN 2012TDD Workshop UTN 2012
TDD Workshop UTN 2012
 
Object Oriented Testing(OOT) presentation slides
Object Oriented Testing(OOT) presentation slidesObject Oriented Testing(OOT) presentation slides
Object Oriented Testing(OOT) presentation slides
 
S.t.
S.t.S.t.
S.t.
 
Testing concepts
Testing conceptsTesting concepts
Testing concepts
 
Software testing
Software testingSoftware testing
Software testing
 
Software testing
Software testingSoftware testing
Software testing
 
Introduction to software testing
Introduction to software testingIntroduction to software testing
Introduction to software testing
 
5 Best Unit Test Frameworks to Automate Unit Tests
5 Best Unit Test Frameworks to Automate Unit Tests5 Best Unit Test Frameworks to Automate Unit Tests
5 Best Unit Test Frameworks to Automate Unit Tests
 
How to Make the Most of Regression and Unit Testing.pdf
How to Make the Most of Regression and Unit Testing.pdfHow to Make the Most of Regression and Unit Testing.pdf
How to Make the Most of Regression and Unit Testing.pdf
 
Testing strategies
Testing strategiesTesting strategies
Testing strategies
 
unittesting-190620114546 (1).pptx document
unittesting-190620114546 (1).pptx documentunittesting-190620114546 (1).pptx document
unittesting-190620114546 (1).pptx document
 
Introduction To UnitTesting & JUnit
Introduction To UnitTesting & JUnitIntroduction To UnitTesting & JUnit
Introduction To UnitTesting & JUnit
 
Testing
Testing Testing
Testing
 

More from Zeeshan Khan

Spring security4.x
Spring security4.xSpring security4.x
Spring security4.xZeeshan Khan
 
Micro services overview
Micro services overviewMicro services overview
Micro services overviewZeeshan Khan
 
XML / WEB SERVICES & RESTful Services
XML / WEB SERVICES & RESTful ServicesXML / WEB SERVICES & RESTful Services
XML / WEB SERVICES & RESTful ServicesZeeshan Khan
 
Collection framework (completenotes) zeeshan
Collection framework (completenotes) zeeshanCollection framework (completenotes) zeeshan
Collection framework (completenotes) zeeshanZeeshan Khan
 
Introduction to BIG DATA
Introduction to BIG DATA Introduction to BIG DATA
Introduction to BIG DATA Zeeshan Khan
 
Android application development
Android application developmentAndroid application development
Android application developmentZeeshan Khan
 

More from Zeeshan Khan (12)

Apache kafka
Apache kafkaApache kafka
Apache kafka
 
Spring security4.x
Spring security4.xSpring security4.x
Spring security4.x
 
Micro services overview
Micro services overviewMicro services overview
Micro services overview
 
XML / WEB SERVICES & RESTful Services
XML / WEB SERVICES & RESTful ServicesXML / WEB SERVICES & RESTful Services
XML / WEB SERVICES & RESTful Services
 
Manual Testing
Manual TestingManual Testing
Manual Testing
 
Collection framework (completenotes) zeeshan
Collection framework (completenotes) zeeshanCollection framework (completenotes) zeeshan
Collection framework (completenotes) zeeshan
 
OOPS in Java
OOPS in JavaOOPS in Java
OOPS in Java
 
Java
JavaJava
Java
 
Introduction to BIG DATA
Introduction to BIG DATA Introduction to BIG DATA
Introduction to BIG DATA
 
Big data
Big dataBig data
Big data
 
Android application development
Android application developmentAndroid application development
Android application development
 
Cyber crime
Cyber crimeCyber crime
Cyber crime
 

Recently uploaded

The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 

Recently uploaded (20)

The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 

JUnit with_mocking

  • 2. Junit with Mockito Mr. Zeeshan 1 | P a g e JUnitisan open sourceframework, developedinitiallybyErich Gamma and Kent Beck.Itismainlyused by Java developers to write unit test cases. Before discussing JUnit in detail, it is imperative to understand Software Testing Terminology. Software Testing: Software Testingisthe process of identifying the correctness and qualityof software program. The purpose is to check whether the software satisfies the specific requirements, needs and expectations of the customer/client. In other words, testing is executing a system or application in order tofind software bugs,defectsorerrors. The jobof testingis tofindout the reasons of application failures so that they can be corrected according to customer/client requirements. Example: Car manufacturer tests the car for maximum speed, fuel efficiency and safety from crash. These test results later become the part of advertising strategy for car sales. When we are developing software projects, there can be many reasons for defects in that software. The developercanalsomakeanerrorwhichmayresultinadefectorbuginthesoftwaresourcecode.Any defectorbuginthesoftwarewillproducewrongresultscausingafailure.Whenabugordefectcauses in software application, testing is done to find out the cause of defect and to remove the bug. Aspartofsoftwaredevelopmentifbugintroduced,ithastoberectifiedsothatitdoesnotdisruptsthe wholeprocessofsoftwareprogram.Thatrectifiedpartisagaintestedtoconfirmthatitiscompatible with the rest of program. Most common software problems are: Incorrect implementation of the business rules Weak software performance Incorrect results of data searches Incorrect matching ofdata Inadequate security controls Confusing or misleadingdata Incorrect file handling,etc. Ways of Software Testing: Software Testing can be performed in below 2 ways. 1. Manual Testing: Test Cases executed manually. 2. Automation Testing: Testing performed with the help of automation tools. Inmanualtestingthetesterhastheroleoftheend-userandtrytofindbugsorwrongbehaviorofthe software. Manual testing has some stages/levels as: 1) Unit Testing: It should examine the behavior of a distinct unit of work, like checking methods in classes by writing test cases. 2) Integration Testing: It should examine the interaction between components in their target environment.
  • 3. Junit with Mockito Mr. Zeeshan 2 | P a g e 3) FunctionalTesting:Itshouldtesttheapplicationusecases.Functionaltestingisatypeofblack box testing that bases its test cases on the specifications of the software component under test, and as such, should require no knowledge of the inner design of the code or logic. 4) Stress/loadTesting(PerformanceTesting):Itshouldtesttheperformanceoftheapplication. Without performance testing, software is likely to suffer from issues such as: running slow while severalusersuseitsimultaneously,inconsistenciesacrossdifferentoperatingsystemsandpoor usability.Performancetestingwilldeterminewhetherornottheirsoftwaremeetsspeed,scalability and stability requirements under expected workloads. 5) AcceptanceTesting:Itshouldensurethat theapplicationhasmetthe customer'sgoal. Automationtestingrequiresthatthetesterwritescriptsanduseothersoftwaretotestthedeveloped software. The test scenarios performed manually are run more times very quickly. Aspartofthismaterial,wewillunderstandwhatisUnittesting&howtoperformUnittestingusing Junit and EasyMockframeworks. What is Unit Testing? Aspartofapplicationdevelopmentprocess,Coding(or)Implementationofmodule/taskisdoneby developers.After Codingiscompletedit willbesubmittedtoTesting Team(QA=Quality Analysis Team) totestapplicationfunctionality.QATeamwillperformdifferenttypesorlevelsoftesting.Butbefore submittingcodetoQAteam,ifDevelopersperformsIndividualtasks/modulestestingthenErrors (BUGs) rate will be reduced in Application. Inordertoreducetheprojectsinproject,programmer/developercannottestthecompleteproject, he/shecantestonlyhis/hermoduleortaskthathe/shedeveloped.Thisprocessoftestinghis/her module or task is called as Unit testing. Here Unit indicates a class, method, one layer, one module etc. Unit Testing is a level of software testing where individual units/ components of a software application are tested. Themainobjectiveofunittestingistosplitcodeintomultiplepiecesandtesteachpieceofcode separately to ensure that, it works as expected. Unittestingisusedtoverifyasmallchunkofcodebycreatingapath,functionoramethod.Theterm "unit"existearlierthantheobject-orientedera.Itisbasicallyanaturalabstractionofanobjectoriented system i.e. a java class or object (its instantiated form).
  • 4. Junit with Mockito Mr. Zeeshan 3 | P a g e JUnit ispackaged asa single JAR file, itbasically have alibraryoffunctionality which makeseasierfora developer to create unit test in Java and verify the results of those tests. Why to do Unit Testing? Why it is important? Unit testing is used to identify defects early in software development cycle. Unittestingwillcompeltoreadourowncode.I.e.adeveloperstartsspendingmoretimein reading than writing. Defects in the design of code affectthe development system. A successful code breeds the confidence of developer. Properunittestingdoneduringthedevelopmentstagesavesbothtimeandmoneyintheend. Unit testing of software applications is done during the development (coding) of an application. Unit testing is usually performed by the developer. Types of unit testing: There are two ways to perform unit testing 1. Manual testing 2. Automated testing. Manual Testing: Manual Testing is used to test the program or application manually (means without using any additionaltool) Automated Testing: tools What is JUnit JUnitisthemostpopularunittestingframeworkinJava.Itisusefulforjavadeveloperstowriteandrun repeatabletests.ItisaninstanceofxUnitarchitecture.Asthenameimplies,itisusedforunittestingof a small chunk of code. JUnit Features JUnit is an open source framework which is used for writing & running tests. Provides Annotation to identify the test methods. Provides Assertions for testing expected results. Provides Test runners for running tests. JUnit tests allow you to write code faster which increasing quality JUnit is elegantly simple. It is less complex & takes less time. JUnit tests can be run automatically and they check their own results and provide immediate feedback. There's no need to manually comb through a report of test results. JUnittestscanbeorganizedintotestsuitescontainingtestcasesandevenothertestsuites. Junitshowstestprogressinabarthatisgreeniftestisgoingfineanditturnsredwhenatest fails. JUnit Framework JUnitisthemostpopularunittestingframeworkinJava.Itisexplicitlyrecommendedforunittesting. JUnitdoesnotrequireserverfortestingwebapplication,whichmakesthetestingprocessfast. JUnit framework also allows quick and easy generation of test cases and test data. Theorg.JunitpackageconsistofmanyinterfacesandclassesforJUnittestingsuchasTest,Assert,After, Before, etc. Automation testing is a process of testing an application by using some software
  • 5. Junit with Mockito Mr. Zeeshan 4 | P a g e URL to download JUnit Framework: http://www.junit.org/ Using JUnit with Maven To use JUnit in Maven project, add the following dependency in pom.xml file. Let’s move on to implement first JUnit program. Components required for developing JUnit program are Test Fixture: A test fixture is a context where a test case runs. Typically, test fixtures include: Setup and Teardown Usually, there are some repeated tasks that must be done prior to each test case. Example: create a database connection. Likewise, at the end of each test case, there may be some repeated tasks. Example: to clean up once test execution is over. JUnit provides annotations that help in setup and teardown. It ensures that resources are released, and the test system is in a ready state for next test case. These annotations are discussed below- Setup: @Before annotation is used on a method containing java code to run before each test case. i.e it runs before each test execution.  Objects or resources that are available for any test case.  Activities required that makes these objects/resources available.  These activities are  allocation (setup)  De-allocation (teardown).
  • 6. Junit with Mockito Mr. Zeeshan 5 | P a g e Teardown: @After annotation is used on a method containing java code to run after each test case. Thesemethodswillrunevenifanyexceptionsarethrowninthetestcaseorinthecaseofassertion failures. JUnit Test Suites TestSuitesareusedtoexecutemultipletestsinaspecifiedorder,itcanbedonebycombiningallthe tests in one place. This place is called as the test suites Junit Test Runner First JUnit program Toexecuteourtestmethod(above),weneedtocreateatestrunner.Inthetestrunnerwehavetoadd test class as a parameter in JUnitCore's runclasses() method . It will return the test result, based on whether the test is passed or failed. Let'sunderstandunittestingusingbelowexample.Weneedtocreateatestclasswithatestmethod annotated with @Test as given below: JUnit Test Runner is used to execute our test cases.  JUnitCore class is used to execute these tests.  A method called runClasses provided by org.junit.runner.JUnitCore, is used to run one or several test classes.  ReturntypeofthismethodistheResultobject(org.junit.runner.Result),whichisusedtoaccess information about the tests. See following code example for more clarity.  In above code "result" object is processed to get failures and successful outcomes of test cases we are executing.
  • 7. Junit with Mockito Mr. Zeeshan 6 | P a g e JUnit API JUnitAPIincludesvariousclassesandannotationstowriteatestcase. Seebelowclasseswhich arevery useful while writing a test case 1. voidassertEquals(booleanexpected,booleanactual): Itcheckswhethertwovaluesareequals 2. voidassertFalse(booleancondition):"assertSame"functionalityistocheckthatthetwoobjects refer to the same object. 3. void assertNotNull(Object object): 4. voidassertNull(Objectobject):"assertNull"functionalityistocheckthatanobjectisnull. 5. void assertTrue(boolean condition) : "assertTrue" functionality is to checkthat a condition is 6. voidfail():If youwanttothrowanyassertionerror,youhavefail()thatalwaysresultsin afail verdict. 7. void assertSame([String message] : "assertSame" functionality is to check that the twoobjects 8. voidassertNotSame([String message]:"assertNotSame"functionalityistocheckthatthetwo objects do not refer to the same object. JUnit TestCase Class Torunmultipletests,TestCaseclassisavailableinorg.junit.TestCasepackages.Annotation@Testtells JUnitthatthispublicvoidmethod(TestCasehere)towhichitisattachedcanberunasatestcase. Below table shows some important methods available in org.junit.TestCase class: refertothesameobject. true. null. similar to equals method of Object class 1. org.junit.Assert 2. org.junit.TestCase 3. org.junit.TestResult 4. org.junit.TestSuite JUnit Assert Class This class provides a bunch of assertion methods useful in writing a test case. If all assert statements are passed,testresultsaresuccessful.Ifanyassertstatementfails,testresultsarefailed.Belowarethe Assert methods anddescription Once TestRunner.java executes ourtestmethods wegetoutput injunitconsole asfailed orpassed. "assertNotNull"functionalityistocheckthatanobjectisnot
  • 8. Junit with Mockito Mr. Zeeshan 7 | P a g e Torunmultipletest,TestCaseclassisavailableinorg.junit.TestCasepackages.Annotation@Testtells JUnitthatthispublicvoidmethod(TestCasehere)towhichitisattachedcanberunasatestcase 1. intcountTestCases() :Thismethodisusedtocounthowmanynumberoftestcasesexecuted by run(TestResult tr)method. 2. TestResult createResult() : This method is used to create a TestResult object. 3. String getName() : This method returns a string which is nothing but a TestCase. 4. TestResultrun():ThismethodisusedtoexecuteatestwhichreturnsaTestResultobject 5. voidrun(TestResultresult):ThismethodisusedtoexecuteatesthavingaTestResultobject whichdoesn't returns anything. 6. void setName(Stringname) : Thismethod isused to set a name of aTestCase. 7. voidsetUp():Thismethodisusedtowriteresourceassociationcode.e.g.Createadatabase connection. 8. voidtearDown():Thismethodisusedtowriteresourcereleasecode.e.g.Releasedatabase connection after performing transaction operation. 9. @Test : Test annotation is the creation of Test case to already developed project is known as Test. 1. voidaddError(Testtest,Throwablet):Thismethodisusedifyourequireaddanerrortothe test. 2. voidaddFailure(Testtest,AssertionFailedErrort):Thismethodisusedifyourequireadda failure to the list of failures. 3. voidendTest(Testtest):Thismethodisusedtonotifythatatestisperformed(completed) 4. int errorCount() : Thismethod isused to get the errordetected during test execution. 5. Enumeration<TestFailure> errors() : This method simply returns a collection (Enumeration here) of errors. 6. int failureCount() : This method is used to get the count of errors detected during test execution. 7. voidrun(TestCasetest) : This method is used to execute a test case. 8. int runCount(): This method simply counts the executed test. 9. void startTest(Test test) : This method is used to notify that a test is started. 10. void stop() : This method is used to test run to be stopped. JUnit Annotations Annotations were introduced in Junit4, which makes java code more readable and simple. This is the big difference between Junit3 and Junit4 , that Junit4 is annotation based. With the knowledge of annotations in Junit4, one can easily learn and implement a JUnit test. Below is the list of important and frequently used annotations: 1. @Test : This annotation isa replacement of org.junit.TestCase which indicates that public void method to which it is attached can be executed as a test Case. 2. @Before: This annotation is used if we want to execute some statement such as preconditions before each testcase. 3. @BeforeClass: This annotationis used if we want to execute some statements before allthe test cases for e.g. test connection must be executed before all the test cases. JUnit TestResult Class When you execute a test, it returns a result (in the form of TestResult object). This TestResult object can beusedtoanalyzetheresultantobject.Thistestresultcanbeeitherfailureorsuccessful.Seebelow table for important methods used in org.junit.TestResult class:
  • 9. Junit with Mockito Mr. Zeeshan 8 | P a g e 4. @After : This annotation can be used if we want to execute some statements after each test case for e.g resetting variables, deleting temporary files ,variables, etc. 5. @AfterClass:Thisannotationcanbeusedifwewanttoexecutesomestatementsafteralltest cases for e.g. Releasing resources after executing all test cases. 6. @Ignores:Thisannotationcanbeusedifwewanttoignoresomestatementsduringtestexecutionfor e.g. disabling some test cases during test execution. 7. @Test(timeout=500) : This annotation can be used if we want to set some timeout during test execution fore.g.ifyouareworkingundersomeSLA(Servicelevelagreement),andtestsneedtobecompleted within some specifiedtime. 8. @Test(expected=IllegalArgumentException.class) :This annotation can be used if we want to handle someexceptionduringtestexecution.For,e.g.,ifyouwanttocheckwhetheraparticularmethodis throwing specified exception or not. JUnit Annotations Example Let's create a class covering important JUnit annotations with simple print statements and execute it with a test runner class: Step1)Considerbelowjavaclasshavingvariousmethodswhichareattachedtoabove-listed annotations: Step 2) let's create a test runner class to execute above test:
  • 10. Junit with Mockito Mr. Zeeshan 9 | P a g e Consider businessMethod( ) as given below : (Adding one object to list) In above method as we are adding a string in the variable "list" so list.isEmpty() will returnfalse. assertFalse(list.isEmpty()) must return true : Asa result, the test case will pass. As we have added only one obj in the list, so the size of the list is 1 list.size() must return int value as "1" . So assertEquals(1,list.size())must returntrue :Asa result,thetestcase willpass. Example 1: In this example we will perform unit testing on Calculator class (Business class). Step1: Create a maven project Step 2: Create Calculator.java class like below Intheabovesourcecode,wecannoticethattheclasshastwopublicmethodsnamedsum()&mul(), both methods gets as inputs two integers, and performs calculation returns the result. Below, there is the code of the class named TestCalculator.java, which has the role of our test class:
  • 11. Junit with Mockito Mr. Zeeshan 10 | P a g e Step 3: Create TestCalculator.java like below Explanation: Firstly,wecanseethatthereisa@TestannotationabovethetestSum()&testMul() methods.Thisannotationindicatesthatthepublicvoidmethodtowhichitisattachedcanberunasa testcase.Hence,thetestSum()methodisthemethodthatwilltestthesum()publicmethod.Wecan also observe a method called assertEquals(sum, testsum). The method assertEquals ([String message], object expected, object actual) takes as inputs two objects and asserts that the two objects are equal. Step 4: Create TestRunner class ExecuteaboveTestRunnerclass,byright-clickingintheTestRunnerclassandselectRunAs->JunitTest. Example 2: In this example, we will test Database connections using SingleConnectionProvider.java class
  • 12. Junit with Mockito Mr. Zeeshan 11 | P a g e Explanation:WhenwerunthisTestRunner.javaclass,itwillexecutetestGetConnection()method,inthis we are checking weather it is giving same connection object or different connection object. As SingleConnectionProvider.java is not singleton class, always it will return new connection object hence our test case is going to failure. Output will be displayed like below in console. Example 3: In this example we will test user login functionality with database. Step1: In order to test our dao and service classes’ login functionality, create a database table and insert some sample data using below queries.
  • 13. Junit with Mockito Mr. Zeeshan 12 | P a g e After executing above queries, our USER_MASTER table will have the data like below Step 2: Create UserDao.java class to execute database query like below Note:AsweareusingOracledatabase,needtoaddojdbc14.jar/ojdbc6.jar inprojectbuildpathifitismaven projectaddtheojdbc14/ojdbc6jarrelateddependencyinpom.xmlfilealongwithjunitdependencylikebelow
  • 14. Junit with Mockito Mr. Zeeshan 13 | P a g e Step 3: Create LoginService.java: to call UserDao class method to load user record. Step 3: Create LoginServiceTest.java to test login( ) method functionality. Step 4 : Create TestRunner.java class like below to execute the test case and run this class. Using @ ignore annotation with Condition Let'staketheexampleof howtoignoreatestanddefinethereasonforignoringalongwithit.As discussed above, to provide a reason you have one optional parameter in @ignore annotation where you can provide the reason statement.
  • 15. Junit with Mockito Mr. Zeeshan 14 | P a g e Mocking Aspartoftheapplicationdevelopment,thecodewewritehasanetworkof interdependencies,it may callintothemethodsofseveralotherclasseswhichinturnmaycallyetothermethods;indeedthisisthe intentandpowerofobjectorientedprogramming.Usuallyatthesametimeaswritingourfeaturecode we will also write test code in the form of automated unit tests. We use these unit tests to verify the behavior of our code, to ensure that it behaves as we expect it to behave. Whenweunittestourcodewe wanttotestitinisolationandwewanttotestitfast.Forthepurposesof theunittestweonlycareaboutverifyingourowncode,inthecurrentclassundertest.Generallywealso want to execute our unit tests very regularly, perhaps more than several times per hour when we are refactoring and we are working in our continuous integration environment. Thisiswhenallourinterdependenciesbecomeanissue.Wemightendupexecutingcodeinanotherclass thathasabugthatcausesourunittesttofail.Imagineaclasswhichweusetoreaduserdetailsfroma database,whathappensifthere’snodatabasepresentwhenwewanttorunourunittests?Imaginea classwhichcallsseveralremotewebservices,whatifthey’redownortakealongtimetorespond?Our unit tests could fail due to our dependencies and not because of some issue with the behavior of our code. This isundesirable. In addition to this, it might be very difficult to force a specific event or error condition that we want to ensureourcodehandlescorrectly.Whatifwewanttotestthatsomeclasswhichdeserializeanobject handles a possible ObjectStreamException properly? What if we want to test all boundary return values from a collaborator? What about ensuring that some calculated value is passed correctly to a collaborator?Itmight take alot of codingand a longtimeto replicate theconditionsforourtests,if it is even possible atall. All these issues simply disappear if we use mocks. Mocks act like a substitute for the classes with which wearecollaborating,theytaketheirplaceandbehaveexactlyhowwetellthemtobehave.Mocksletus pretendthatourrealcollaboratorsarethere,eventhoughtheyaren’t.Moreimportantlymockscanbe programmed to return whatever values we want and confirm whatever values are passed to them. Mocks execute instantly and don’t require any external resources. Mocks will return what we tell them to return, throwwhateverexceptionswewantthemtothrowandwilldothesethingsoverandover,ondemand. They let us test only the behavior of our own code, to ensure that our class works, regardless of the behavior of itscollaborators. There are several mocking frameworks available for Java, each have their own syntax, their own strengths, their own weaknesses. Introduction to the EasyMock framework: EasyMock is a mocking framework, JAVA-based library that is usedforeffectiveunittestingofJAVAapplications.EasyMockisusedtomockinterfacessothata dummy functionality can be added to a mock interface that can be used in unit testing. Before we begin, let’s first understand the need behind using EasyMock. Let’s say, you are building an enterprise application for maintaining user’s stock portfolios. Your application would use a stock market service to retrieve stock prices from a real server (such as NASDAQ).
  • 16. Junit with Mockito Mr. Zeeshan 15 | P a g e To make it clear, have a look at the below code snippet  In the first line, we ask the EasyMock to create a mock object for our IWeatherForeCastor interface.  Andtheninthesecondline,wedefinehowthismockobjectshouldbehave -i.e.,whenthe getTemperature (long zipcode) method is called with the parameter 500081’, the mock should return 42.14.  And then, we call the replay () method, to make the mock object ready to use. Example: Let’sdevelopour WeatherForeCastor ApplicationtogetTemperatureDetailsusingzipcode (Below are the sample screens) When it comes to testing your code, you wouldn’t want to hit the real stock market server for fetching thestockprices.Instead,youwouldlikesomedummypricevalues.So,youneedtomockthestockmarket service that returns dummy values without hitting the real server. EasyMock is exactly doing the same - helps you to mock interfaces. You can pre-define the behavior of yourmockobjectsand thenusethismockobjectin yourcodefortesting.Because,youareonly concerned about testing your logic and not the external services or objects. So, it makes sense mock the external services using Easy Mock. As per above Part-1 diagram, 1: Client will access the application and Enters Zip Code and clicks on ‘Get Temperature’ button 2: Client Request will be received by WeatherController.java and it captures zipcode from request
  • 17. Junit with Mockito Mr. Zeeshan 16 | P a g e 3: Controller Hits WeatherService.java class to process business logic Here our WeatherService.java class, don’t know the Temperature Details. Temperature details we have to get fromaWebservicewhichwasexposedbyothercompany(ThatWebServicewilltalktoaDeviceandthat Device will connect with Satellites to get the Temperature Details). As per above Part-2 diagram, 1: When someone tries to consume this WebService, it will talk to a Device (which is connected with Satellites) 2: Device will connect with Satellite to get Temperature Details 3: Device capture Temperature details from Satellite and return response to Webservice 4: Webservice will return temperature details as a response to Consumer (i.e. Our WeatherService.java class) OnceWebServicereturntheResponsetoourWeatherService.javaclass,ourServicewilldofurther business logic processing andreturns final response to Controller. Intheaboveprocess,ifWebServiceisupandrunningthenwecancomplete unittestingofourService class method which will retrieve Temperature details and do further processing to return final details to Controller classmethod. If above mentioned WebService is down, we can’t perform Unit testing for our Service class method. DoweneedtowaitforWebServiceavailabilitytotestourpieceofcode?theAnswerforthisisNO because we don’t know when that Webservice will be up and running So instead of waiting for that WebService to be available wecan use EasyMock to mock that Service with dummy implementation to complete our Unit Testing. Below example depicts the same..
  • 18. Junit with Mockito Mr. Zeeshan 17 | P a g e Add below 2 dependencies in pom.xml file to work with Junit and EasyMock Step2: Create IWeatherForeCastor.java (it contains getTemperature ( ) method). Step1: Create a standalone maven project like below using quick-start archetype Step3:createWeatherForeCastorService.java (Thisclassmethodprovidestemperaturebasedongiven zipcode.Itinteracts withIBMForeCastor whichisimplementation forIWeatherForeCastor.java interface)
  • 19. Junit with Mockito Mr. Zeeshan 18 | P a g e Step 3: Create TestWeatherForecastService.java Testing Portfolio application using JUnit and EasyMock Step4: Execute TestWeatherForeCastorService.java as JunitTest app
  • 20. Junit with Mockito Mr. Zeeshan 19 | P a g e EasyMock.replay(marketMock); So, here after our mock object’s getTemperature ( ) method would return 42.14 when called with 500081. ===000=== As we can see in above code, during setUp() we are creating new WeatherForeCastorService object. Then we ask EasyMock to create a mock object for the IWeatherForeCastor interface. Then we inject thismockobjectintoourWeatherForeCastorServiceobjectusingservice.setIbmForeCastor()method. In the @Test method, we define how our mock object should behave when called, using the below code: EasyMock.expect(ibmForeCastor.getTemperatur(500081).andReturn(42.14);