none
寫單元測試,參考衝突或缺少參考 RRS feed

  • 問題

  • 前輩好:

    最近想把舊程式重構,

    但當初我很廢,沒有物件導向的觀念,程式碼寫的很雜很亂很難維護,

    所以現在想重構程式,也想補單元測試。

    但因為我怕把程式碼改壞,所以想說先把方法的最外層包起來,

    至少完整的功能是綠燈後再慢慢拆,慢慢重構。

    不過才剛重構就發生了下面的Exception:

    1. 類型 'XXXX' 定義在未參考的組件中。您必須加入組件

    2.若我有用EF6,執行到該段時也會有未定義的錯誤

    3. 有時候會有組件衝突的錯誤訊息

    不過不能理解的是:寫測試時,不是"被呼叫方"的專案程式碼有引用參考就好嗎?  為什麼連測試專案都要一起引用參考

    希望前輩能指點一二,

    希望能知道我現在怎麼重構比較好,

    個人是想先寫單元測試再重構,但如果前輩們不建議,就會改成先重構再寫單元測試的作法。

    謝謝前輩

    2018年5月15日 上午 05:26

解答

  • 看起來是相依性的問題吧!

    假設你正在測試專案A有個方法B 用到 EF 

    但是你在測試專案中 只加入了 A的參考 但是實際上 A的 方法B 是相依於 EF 的。

    基本上會寫個粒度大一點的整合測試或是驗收測試 做為最外層的保護網 接著重構 接著再慢慢加入粒度小的單元測試。

    • 已標示為解答 HumorA 2018年5月16日 上午 03:05
    2018年5月15日 上午 05:58
  • 希望能知道我現在怎麼重構比較好,

    個人是想先寫單元測試再重構,但如果前輩們不建議,就會改成先重構再寫單元測試的作法。

    如果可以的話當然是先寫單元測試再重構,有了單元測試的保護,比較不用擔心重構壞了原來的邏輯。

    但要注意重構是針對「測試單元」,而不是 Method,否則可能會一直修改單元測試...

    推薦《單元測試的藝術》這本書~

    但實務上還是偶會遇到必須先小範圍重構才能包單元測試的情況

    通常小範圍重構我盡可能用一些比較有把握、IDE 內建的技法,例如 extract method、rename 等。

    • 已標示為解答 HumorA 2018年5月16日 上午 03:05
    2018年5月15日 下午 12:13
  • 對使用Entity Framework的功能進行單元測試的做法可以參考:

    Entity Framework Testing with a Mocking Framework (EF6 onwards)

    • 已標示為解答 HumorA 2018年5月16日 上午 03:05
    2018年5月16日 上午 01:06

所有回覆

  • 看起來是相依性的問題吧!

    假設你正在測試專案A有個方法B 用到 EF 

    但是你在測試專案中 只加入了 A的參考 但是實際上 A的 方法B 是相依於 EF 的。

    基本上會寫個粒度大一點的整合測試或是驗收測試 做為最外層的保護網 接著重構 接著再慢慢加入粒度小的單元測試。

    • 已標示為解答 HumorA 2018年5月16日 上午 03:05
    2018年5月15日 上午 05:58
  • 希望能知道我現在怎麼重構比較好,

    個人是想先寫單元測試再重構,但如果前輩們不建議,就會改成先重構再寫單元測試的作法。

    如果可以的話當然是先寫單元測試再重構,有了單元測試的保護,比較不用擔心重構壞了原來的邏輯。

    但要注意重構是針對「測試單元」,而不是 Method,否則可能會一直修改單元測試...

    推薦《單元測試的藝術》這本書~

    但實務上還是偶會遇到必須先小範圍重構才能包單元測試的情況

    通常小範圍重構我盡可能用一些比較有把握、IDE 內建的技法,例如 extract method、rename 等。

    • 已標示為解答 HumorA 2018年5月16日 上午 03:05
    2018年5月15日 下午 12:13
  • 對使用Entity Framework的功能進行單元測試的做法可以參考:

    Entity Framework Testing with a Mocking Framework (EF6 onwards)

    • 已標示為解答 HumorA 2018年5月16日 上午 03:05
    2018年5月16日 上午 01:06
  • To Coding Kid 大

    我原先是打算先包一包大的,把整合測試包起來,再慢慢修改

    最後我通通參考進去還是會有些問題,

    昨晚決定先重構看起來比較簡單的部分,想至少寫出一次重構程式,等我觀念比較穩固後再回來處理今天我處理不了的部分

    To Mystic 大

    已下標此書,我的觀念太零碎了 Orz

    我昨晚跟今天有先把一小部分重構了,不過我是先包整合測試,

    再照前輩所說透過擷取方法的方式重構,我再針對這些去做單元測試

    步調有點慢,也不確定我的方向是否正確,但至少覺得有稍微動起來了,之後會配合書提升觀念,謝謝前輩推薦的書籍

    To This大

    Mock我只知道作用但還不會用..

    等我學會再上來回應心得


    謝謝三位前輩

    2018年5月16日 上午 03:05