有沒有什麼方法可以使用Crystal的內置spec
庫來單元測試私有方法?如何測試私有方法?
我來自PHP背景,可以使用ReflectionMethod::setAccessibility
將方法的可訪問性更改爲公開以允許對其進行測試。我在Crystal API文檔中找不到任何類似內容,所以只是想知道這樣的事情是否存在。
有沒有什麼方法可以使用Crystal的內置spec
庫來單元測試私有方法?如何測試私有方法?
我來自PHP背景,可以使用ReflectionMethod::setAccessibility
將方法的可訪問性更改爲公開以允許對其進行測試。我在Crystal API文檔中找不到任何類似內容,所以只是想知道這樣的事情是否存在。
我同意私人方法不應該被測試。然而,如果你真的想這樣做,你可以重新開放課程,並重新定義方法而不需要任何可見性(如此公開),並使用previous_def
。例如:
class Foo
private def bar(x, y)
x + y
end
end
# Reopen
class Foo
# Redefine bar
def bar(x, y)
# Invoke the previous definition
previous_def
end
end
foo = Foo.new
p foo.bar(1, 2)
你真的覺得,測試你特別應該添加額外的方法嗎?您應該編寫測試來覆蓋您的代碼,但不要編寫運行測試代碼 –
,只是不要在任何測試方法上使用私有修改器。就像任何帶有可見性修飾符的語言一樣。 Crystal允許重新打開類,但是,這很棘手。 –
如果Crystal
紅寶石般的語言比私有方法應公開的方法進行測試。或使用代碼的地方使用
根據傳統觀點,您不要單元測試私有方法。 –
@ 500-InternalServerError小心分享一些來源來備份此聲明?方法的可見性與其是否正常工作無關,而確定它是否正常工作的唯一方法是通過測試它。從測試中排除所有私有方法聽起來像是一個有風險的策略。 –
我聽到有人說班級設計應該是這樣的,不需要測試私人方法,因爲這些都是實現細節。但是,這種方法(如果全面的測試覆蓋率是目標),那麼結果將是一個粒度非常精細的類系統,其中使用了很多代表團。 – Codor