Litter Bugs

Definition:

  • Each test has a side effect that persists between test cases, often resulting in tests that depend on one another. This is often called “test pollution”

Also Known As:

  • Test Pollution

Code Example:

# Subject under test
$all_time_logins = 0
class Game
  def self.instance
    @game ||= new
  end

  def initialize
    @players = []
  end

  def add_player(name)
    @players << name
    $all_time_logins += 1
  end

  def player_count
    @players.size
  end
end

# Test
class LitterBugs < SmellTest
  include UnreliableMinitestPlugin

  def setup
    @game = Game.instance
  end

  def test_login_one_player
    @game.add_player("Joe")

    assert_equal 1, @game.player_count
    assert_equal 1, $all_time_logins
  end

  def test_login_two_players
    @game.add_player("Jane")
    @game.add_player("Stef")

    assert_equal 3, @game.player_count
    assert_equal 3, $all_time_logins
  end
end

References:

Quality attributes

  • - Code Example

  • - Cause and Effect

  • - Frequency

  • - Refactoring