Unit testing is a fundamental practice in software development that ensures individual components of your code work as expected. In Ruby, Minitest is a popular testing library that provides a simple and efficient way to write and run tests.
What is Minitest?
Minitest is a testing suite that comes pre-installed with Ruby. It supports a variety of testing styles, including unit tests, specs, and mocks. Minitest is lightweight and easy to use, making it a great choice for both beginners and experienced developers.
Setting Up Minitest
Before you start writing tests with Minitest, ensure you have it installed. Since Minitest comes bundled with Ruby, you typically don't need to install it separately. However, if you need to update or install it, you can do so using the following command:
Writing Your First Test
Let's start by writing a simple test for a basic Ruby class. Consider the following Calculator class:
To test this class using Minitest, create a new file named test_calculator.rb:
require 'minitest/autorun'
require_relative 'calculator'
class TestCalculator < Minitest::Test
def setup
@calculator = Calculator.new
end
def test_add
assert_equal 5, @calculator.add(2, 3)
end
def test_subtract
assert_equal 1, @calculator.subtract(3, 2)
end
endExplanation
- require 'minitest/autorun': This line includes the Minitest library and automatically runs the tests when the file is executed.
- require_relative 'calculator': This line includes the
Calculatorclass file. - class TestCalculator < Minitest::Test: This defines a new test class that inherits from
Minitest::Test. - setup method: This method runs before each test, initializing a new
Calculatorobject. - test_add and test_subtract methods: These methods contain the actual tests. The
assert_equalmethod checks if the expected value matches the actual value returned by the method being tested.
Running the Tests
To run the tests, simply execute the test file from the command line:
You should see output indicating whether the tests passed or failed.
Common Assertions
Minitest provides several assertion methods to validate your code. Here are some commonly used assertions:
| Assertion Method | Description |
|---|---|
assert |
Asserts that the expression is true |
assert_equal |
Asserts that two values are equal |
assert_nil |
Asserts that the value is nil |
assert_raises |
Asserts that a specific exception is raised |
refute |
Asserts that the expression is false |
refute_equal |
Asserts that two values are not equal |
Example
Practical Exercise
Exercise
-
Create a
StringManipulatorclass with the following methods:reverse_string(str): Reverses the given string.upcase_string(str): Converts the given string to uppercase.
-
Write tests for the
StringManipulatorclass using Minitest.
Solution
StringManipulator class:
class StringManipulator
def reverse_string(str)
str.reverse
end
def upcase_string(str)
str.upcase
end
endTest file:
require 'minitest/autorun'
require_relative 'string_manipulator'
class TestStringManipulator < Minitest::Test
def setup
@manipulator = StringManipulator.new
end
def test_reverse_string
assert_equal 'olleh', @manipulator.reverse_string('hello')
end
def test_upcase_string
assert_equal 'HELLO', @manipulator.upcase_string('hello')
end
endConclusion
In this section, you learned how to set up and use Minitest for unit testing in Ruby. You wrote and ran tests for a simple class, explored common assertion methods, and completed a practical exercise to reinforce your understanding. Unit testing is a crucial skill for ensuring the reliability and maintainability of your code, and Minitest provides a straightforward way to get started. In the next section, we will delve into Behavior-Driven Development (BDD) with RSpec, another powerful testing framework in Ruby.
Ruby Programming Course
Module 1: Introduction to Ruby
Module 2: Basic Ruby Concepts
Module 3: Working with Collections
Module 4: Object-Oriented Programming in Ruby
- Classes and Objects
- Instance Variables and Methods
- Class Variables and Methods
- Inheritance
- Modules and Mixins
Module 5: Advanced Ruby Concepts
Module 6: Ruby on Rails Introduction
- What is Ruby on Rails?
- Setting Up Rails Environment
- Creating a Simple Rails Application
- MVC Architecture
- Routing
Module 7: Testing in Ruby
- Introduction to Testing
- Unit Testing with Minitest
- Behavior-Driven Development with RSpec
- Mocking and Stubbing
