2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
有兩種明顯的方法。
測(cè)試實(shí)際使用這些值的位置。如果變量不在類外使用,為什么它們?cè)谀抢??在提供的代碼中,您只需要測(cè)試您是否獲得了
IllegalArgumentException
適當(dāng)?shù)拇a。添加“獲取”方法。
我更喜歡第一個(gè)。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
我同意 Tom Hawtin 的回答,但我會(huì)把它們翻過來這么說:
單元測(cè)試通常應(yīng)該避免查看被測(cè)類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。他們應(yīng)該測(cè)試類如何與抽象邊界之外的事物交互。
如果您在單元測(cè)試中查看“盒子內(nèi)部”,那么如果實(shí)現(xiàn)發(fā)生更改,測(cè)試可能會(huì)不必要地中斷。是的,您可以修復(fù)測(cè)試,但是您會(huì)遇到知道非測(cè)試代碼是否也被破壞的問題。
另一方面,查看“盒子內(nèi)部”可能會(huì)更容易編寫測(cè)試用例。如果您決定采用這種方法:
添加單元測(cè)試用例可以使用的 getter 將允許其他代碼依賴于實(shí)現(xiàn)細(xì)節(jié)。這是一個(gè)壞主意,即使 getter 是以防止修改的方式實(shí)現(xiàn)的。(您仍然有潛在的不想要的耦合,并且對(duì)您的類實(shí)現(xiàn)細(xì)節(jié)的更改會(huì)破壞事情)。
也可以使用反射從測(cè)試用例中檢查私有字段。這很丑陋,但可以說比 getter 更好,因?yàn)椤捌胀ā贝a不會(huì)這樣做。實(shí)現(xiàn)更改仍然可能破壞單元測(cè)試......但只有單元測(cè)試。