我想重構一個測試套件,這種套件的方式與實現緊密耦合,但我遇到了關係問題。例如,我有一個簡單的用戶模式:測試模型的關係,而不與實現耦合
class AdminUser < ActiveRecord::Base
belongs_to :user_role
delegate :executive?, to: :user_role
end
這是UserRole的模型:
class UserRole < ActiveRecord::Base
def executive?
name == 'Executive'
end
end
測試的UserRole的模式很容易,但是,下面的徹底檢驗規則,我想我也應該測試AdminUser模型,因爲我期望它響應.executive ?,這就是我的問題開始的地方。
如果我遵循通常的單元測試規則,我應該只測試AdminUser,所以我可以模擬UserRole.executive?並完成它,但是...如果UserRole的實現隨着時間的推移而發生變化會怎樣?如果我想將UserRole更改爲另一個模型或更復雜的對象以遵循更復雜的規則,該怎麼辦?我需要更改AdminUser的測試以遵循新的實現,並且感覺有點骯髒,因爲在單元測試中肛門,我應該只測試'what',而不是'how'。
我在這裏過於嚴格嗎?有沒有更好的方式來做到這一點,我不抓?