This is my first attempt at BDD and RSpec. I'm more of a C# xUnit kind of guy.
I wrote this class while developing a 2D random tile map generator (just for fun). The project is still ongoing.
I would particularly like some review on:
- Test granularity/scope in relation to BDD
- Use of RSpec
- Are these too much like unit tests?
- Adherence to Ruby and RSpec idioms, conventions, coding style
I am also open to any other kind of comments and review.
require './map_factory'
describe MapFactory, "map creation" do
before(:each) do
@map_factory = MapFactory.new
end
it "should return a new Map instance" do
map = @map_factory.make(20, 20)
map.should be_an_instance_of(Map)
end
it "should be a map of the specified size" do
map = @map_factory.make(20, 20)
map.width.should equal(20)
map.height.should equal(20)
map.tiles.length.should equal(400)
end
it "should be an island" do
map = @map_factory.make(20, 20)
# an island should have water all around it
for x in 0...map.width
map.tile_at(x, 0).type.should eq(:water)
map.tile_at(x, 19).type.should eq(:water)
end
for y in 0...map.height
map.tile_at(0, y).type.should eq(:water)
map.tile_at(19, y).type.should eq(:water)
end
end
it "should have more than half the tiles be landmass" do
map = @map_factory.make(40, 40)
number_of_water_tiles = 0
number_of_land_tiles = 0
map.tiles.each do |tile|
if tile.type == :water then
number_of_water_tiles += 1
else
number_of_land_tiles += 1
end
end
number_of_land_tiles.should be > number_of_water_tiles
end
end