Categories: Unit Testing

Unit Tests – Mocking vs Stubbing Vs Spying

The article lists down some good reads (from different webpages on internet) on unit testing concepts such as mocking, stubbing and spying and represents summarized information on these concepts.

After going through all the above pages, I could arrive at following definitions:

Mocking

Mocking is a unit testing phenomenon which is used to replace real objects with test objects that mocks the behavior. These test objects are called as Mock objects. The point to note is that mock objects are not coded in advance with pre-determined return results. On the other hand, they are created at run-time with set expectations which are later verified after the execution of the tests. Tests written with mock objects follow following pattern:

  • Initialize mocks
  • Set expectations
  • Execute the tests
  • Verify whether one or more methods got executed as expected

The primary reason for using mocking is to eliminate testing all the dependencies of a class or function so your tests are more focused and simpler.

 

Stubbing

Stubbing, on the other hand, is used to replace real objects with test objects that are coded in advance with predefined behavior and return canned results. Those working with dependency injection frameworks such as Spring finds it very easy to inject stubs in place of real objects while doing unit testing. Stubs may also be used to record some data around testing which is not possible with mock objects. This is also one of the key reason why one may want to go with stubbing in some cases rather than mocking. However, unlike mock objects, Stubs could not be used to verify interactions and related behavior.

Spying

Spying is a mocking concept which is used to do partial mocking. Spying is used in the cases when there is a need to mock only few methods of the class, primarily due to the reason that execution of these methods would have one or more side effects. Spying is recommended mainly in the case of legacy code.

[adsenseyu1]
Ajitesh Kumar

I have been recently working in the area of Data analytics including Data Science and Machine Learning / Deep Learning. I am also passionate about different technologies including programming languages such as Java/JEE, Javascript, Python, R, Julia, etc, and technologies such as Blockchain, mobile computing, cloud-native technologies, application security, cloud computing platforms, big data, etc. For latest updates and blogs, follow us on Twitter. I would love to connect with you on Linkedin. Check out my latest book titled as First Principles Thinking: Building winning products using first principles thinking. Check out my other blog, Revive-n-Thrive.com

Share
Published by
Ajitesh Kumar
Tags: Unit Testing

Recent Posts

Pricing Analytics in Banking: Strategies, Examples

Last updated: 15th May, 2024 Have you ever wondered how your bank decides what to…

2 days ago

How to Learn Effectively: A Holistic Approach

In this fast-changing world, the ability to learn effectively is more valuable than ever. Whether…

4 days ago

How to Choose Right Statistical Tests: Examples

Last updated: 13th May, 2024 Whether you are a researcher, data analyst, or data scientist,…

4 days ago

Data Lakehouses Fundamentals & Examples

Last updated: 12th May, 2024 Data lakehouses are a relatively new concept in the data…

5 days ago

Machine Learning Lifecycle: Data to Deployment Example

Last updated: 12th May 2024 In this blog, we get an overview of the machine…

5 days ago

Autoencoder vs Variational Autoencoder (VAE): Differences, Example

Last updated: 12th May, 2024 In the world of generative AI models, autoencoders (AE) and…

5 days ago