Minitest 不会通过,尽管使用 binding.pry 检查标准是正确的
Minitest won't pass, although criteria are correct when checked with binding.pry
这是被测试的对象
class Ship
attr_reader :size, :x, :y, :axis
def initialize size
@size = size
end
def length
@size = size
end
def place x, y, axis
@x = x
@y = y
@axis = axis
end
def covers? a, b
x = @x
y = @y
if x == a and y == b
return true
else
(@size - 1).times do
if @axis
x += 1
else
y += 1
end
return true if x == a and y == b
end
false
end
end
结束
这个测试会通过
def test_08_ship_can_be_placed_across
ship = Ship.new(4)
assert ship.place(2, 1, true)
assert ship.covers?(2, 1)
assert ship.covers?(3, 1)
assert ship.covers?(4, 1)
assert ship.covers?(5, 1)
refute ship.covers?(1, 1)
refute ship.covers?(6, 1)
refute ship.covers?(4, 2)
end
这是不会通过的测试
def test_09_ship_can_be_placed_down
ship = Ship.new(4)
assert ship.place(2, 2, false)
refute ship.covers?(2, 1)
assert ship.covers?(2, 2)
assert ship.covers?(2, 3)
assert ship.covers?(2, 4)
assert ship.covers?(2, 5)
refute ship.covers?(2, 6)
refute ship.covers?(3, 2)
end
如果我在 ship.covers 上做 binding.pry?使用这些参数中的任何一个,我都会得到正确的答案。由于某种原因,测试仍然无法通过...
这是错误信息。信息不多...
1) Failure:
BattleshipTest#test_09_ship_can_be_placed_down [battleship_minitest.rb:73]:
Failed assertion, no message given.
Binding.pry 测试通过
[1] pry(main)> ship1.covers?(2, 1)
=> true
[2] pry(main)> ship1.covers?(3, 1)
=> true
[3] pry(main)> ship1.covers?(4, 1)
=> true
[4] pry(main)> ship1.covers?(5, 1)
=> true
[5] pry(main)> ship1.covers?(1, 1)
=> false
[6] pry(main)> ship1.covers?(6, 1)
=> false
[7] pry(main)> ship1.covers?(4, 2)
=> false
Binding.pry 对于失败的测试
[1] pry(main)> ship2.covers?(2, 1)
=> false
[2] pry(main)> ship2.covers?(2, 2)
=> true
[3] pry(main)> ship2.covers?(2, 3)
=> true
[4] pry(main)> ship2.covers?(2, 4)
=> true
[5] pry(main)> ship2.covers?(2, 5)
=> true
[6] pry(main)> ship2.covers?(2, 6)
=> false
[7] pry(main)> ship2.covers?(3, 2)
=> false
你在断言一个备考方法(我的想法):
assert ship.place(2, 1, false)
ship.place
returns 轴的值,因为它是在方法中最后分配的。它适用于第一种情况,因为 axis 设置为 true。
这是被测试的对象
class Ship
attr_reader :size, :x, :y, :axis
def initialize size
@size = size
end
def length
@size = size
end
def place x, y, axis
@x = x
@y = y
@axis = axis
end
def covers? a, b
x = @x
y = @y
if x == a and y == b
return true
else
(@size - 1).times do
if @axis
x += 1
else
y += 1
end
return true if x == a and y == b
end
false
end
end
结束
这个测试会通过
def test_08_ship_can_be_placed_across
ship = Ship.new(4)
assert ship.place(2, 1, true)
assert ship.covers?(2, 1)
assert ship.covers?(3, 1)
assert ship.covers?(4, 1)
assert ship.covers?(5, 1)
refute ship.covers?(1, 1)
refute ship.covers?(6, 1)
refute ship.covers?(4, 2)
end
这是不会通过的测试
def test_09_ship_can_be_placed_down
ship = Ship.new(4)
assert ship.place(2, 2, false)
refute ship.covers?(2, 1)
assert ship.covers?(2, 2)
assert ship.covers?(2, 3)
assert ship.covers?(2, 4)
assert ship.covers?(2, 5)
refute ship.covers?(2, 6)
refute ship.covers?(3, 2)
end
如果我在 ship.covers 上做 binding.pry?使用这些参数中的任何一个,我都会得到正确的答案。由于某种原因,测试仍然无法通过...
这是错误信息。信息不多...
1) Failure:
BattleshipTest#test_09_ship_can_be_placed_down [battleship_minitest.rb:73]:
Failed assertion, no message given.
Binding.pry 测试通过
[1] pry(main)> ship1.covers?(2, 1)
=> true
[2] pry(main)> ship1.covers?(3, 1)
=> true
[3] pry(main)> ship1.covers?(4, 1)
=> true
[4] pry(main)> ship1.covers?(5, 1)
=> true
[5] pry(main)> ship1.covers?(1, 1)
=> false
[6] pry(main)> ship1.covers?(6, 1)
=> false
[7] pry(main)> ship1.covers?(4, 2)
=> false
Binding.pry 对于失败的测试
[1] pry(main)> ship2.covers?(2, 1)
=> false
[2] pry(main)> ship2.covers?(2, 2)
=> true
[3] pry(main)> ship2.covers?(2, 3)
=> true
[4] pry(main)> ship2.covers?(2, 4)
=> true
[5] pry(main)> ship2.covers?(2, 5)
=> true
[6] pry(main)> ship2.covers?(2, 6)
=> false
[7] pry(main)> ship2.covers?(3, 2)
=> false
你在断言一个备考方法(我的想法):
assert ship.place(2, 1, false)
ship.place
returns 轴的值,因为它是在方法中最后分配的。它适用于第一种情况,因为 axis 设置为 true。