Ao escrever testes de unidade, geralmente deve -se testar a API pública de uma classe. Às vezes, entretanto, pode ser necessário / desejável também testar métodos privados (há muita discussão sobre esse assunto por aí, e eu realmente não quero entrar nisso ;-). Mas, qual é a melhor maneira de testar a unidade de métodos protegidos e privados em Ruby? .
A questão vinculada ao SO contém algumas sugestões. Eu realmente não posso dizer qual deles pode ser o melhor , mas aqui está um fácil que não está listado. Vamos supor que você tenha a seguinte classe:
class Foo
private
def bar
42
end
end
E se você quiser testar o método privado bar
, pode simplesmente adicionar o seguinte, por exemplo, à sua classe auxiliar de teste:
class Foo
public *self.private_instance_methods(false)
end
O que isso faz?
public
é um método que pega1..n
símbolos que representam os nomes dos métodos de instância e os torna públicos.self.private_instance_methods
retorna todos os métodos de instância privados deFoo
(duh) como uma lista, e o parâmetro booleano indica se devemos ou não incluir métodos herdados (o que não queremos neste caso).- O operador splat (o
*
) descompacta a lista retornada como parâmetros para,public
portanto, tornar todos os métodos privadosFoo
públicos. O mesmo funciona com métodos protegidos se você usarprotected_instance_methods
🙂