尽管使用binding.pry检查标准是正确的,Minitest也不会通过

时间:2015-07-07 01:22:48

标签: ruby minitest assertions

这是正在测试的对象

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上绑定.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

1 个答案:

答案 0 :(得分:0)

您正在断言测试准备方法(我认为):

assert ship.place(2, 1, false)

ship.place返回轴的值,因为它在方法的最后分配。它适用于第一种情况,因为axis设置为true。