Mocking and stubbing are essential techniques in Ruby for creating effective unit tests. These methods allow developers to isolate code, simulate behavior, and improve test reliability.
Mocking creates objects that mimic the behavior of real objects in controlled ways. Stubbing, on the other hand, replaces specific method behaviors with predefined responses.
Ruby provides several libraries for mocking, with RSpec being one of the most popular. Here's a simple example using RSpec:
require 'rspec'
class WeatherService
def get_temperature(city)
# Imagine this method makes an API call
end
end
describe WeatherService do
it "returns the temperature for a city" do
weather_service = instance_double(WeatherService)
allow(weather_service).to receive(:get_temperature).with("London").and_return(20)
expect(weather_service.get_temperature("London")).to eq(20)
end
end
In this example, we create a mock object using instance_double
and define its behavior using allow
.
Stubbing is often used to replace method calls with predefined return values. Here's an example:
require 'rspec'
class User
def full_name
"John Doe"
end
end
describe User do
it "returns a stubbed full name" do
user = User.new
allow(user).to receive(:full_name).and_return("Jane Smith")
expect(user.full_name).to eq("Jane Smith")
end
end
This code demonstrates how to stub the full_name
method to return a different value during testing.
To further enhance your Ruby testing skills, explore these related topics:
By mastering mocking and stubbing, you'll be able to write more robust and reliable tests for your Ruby applications. Remember to use these techniques judiciously and always aim for clear, maintainable test code.