轨道最小。当 Exception 类为私有时,检查是否引发异常的正确方法是什么?



我定义了一个"私人的";我的一个模型中的异常类(因为这是一个实现细节(如下:

class User < ApplicationRecord
class InvalidStateException < StandardError
def initialize(msg = "Invalid State")
super(msg)
end
end
private_constant :InvalidStateException
end

在我的测试中,我想检查是否出现了这样的异常:

test "should not follow themselves" do
joao = users(:joao)
assert_not joao.following?(joao)
assert_raise(User::InvalidStateException) { joao.follow(joao) }
assert_not joao.following?(joao)
end

但正如预期的那样,一旦我试图在测试中引用一个私有常数,就会引发一个NameError:

test_should_not_follow_themselves#RelationshipTest (1.92s)
NameError:         NameError: private constant #<Class:0x00005570b89cba48>::InvalidStateException referenced

那么,我该如何让Exception私有化并对其进行测试呢?

你所做的对我来说似乎违背直觉,但我该评判谁。

ruby中没有任何东西是真正私人的,你可以获得你的"私人的";使用.const_get的常数

User.const_get(:InvalidStateException)

最新更新