我們使用生成器模式來生成測試數據。這些域對象之間有關係。我們的功能測試需要這些對象被持久化。堅持複雜的測試數據
想想這個模型:
domain model http://i34.tinypic.com/21mg1gn.png
如果我想CI的普通實例做aNew().c().build()
如果我希望它是堅持我做aNew().c().saveIn(session)
如果我想要一個具有已知BI的C實例aNew().c().with(b).build()
那麼,你有t他的想法。我的問題是,如果我想堅持一個C,它應該堅持它是B嗎?還是應該在手之前堅持下去?如果我想要一個合理的默認B,那麼呢?如果我想堅持一個D呢?它應該堅持所有A,B,C嗎?
當然,真正的系統要複雜得多(有時用循環引用)。我正在尋找堅持複雜測試數據的最佳做法。
編輯:它看起來像我碰到了語言障礙,我的母語不是英語,所以我很抱歉默默無聞。下面是詳細信息:
- 這並不是說我想測試
- 我想寫一個覆蓋測試,而不是一個單元測試(結果我不會嘲笑任何東西)的遺留代碼
- 如果數據庫被擴展到一定程度(它不使用所有實體),我試圖測試的那部分軟件會工作。
PS。請不要猶豫,要求提供更多信息,因爲我一直在努力尋找可能的最佳做法。我想出的最接近的東西是:
- 跟蹤在建立實體時明確設置了什麼。
- 假設明確設置的實體已經存在,請不要堅持它們。
- 堅持一切(帶着自己的持久力)。
這會行得通,但是我的蜘蛛感很刺痛,我認爲我做錯了什麼,因爲測試代碼中會涉及邏輯,如果不進行測試就會非常複雜。
編輯2:我會盡量讓自己更清楚。當我編寫/運行我的單元和一些集成測試時,我沒有問題,因爲測試數據沒有被保存,它存在於內存中。
但是,當我試圖堅持我的測試數據,休眠不會讓我保存一個實體沒有它的關係。
我該如何克服這個問題?
想象一下,這些數據已經存在於數據庫中。另一個過程(我正在測試)正在讀取這些數據。但是有時候B是相關的,我希望在創建和堅持Bs時在測試中可見。但有時它們不相關,我試圖將它們隱藏在建造者身後。 – nimcap 2009-09-24 13:09:26
這對我來說沒有意義。如果數據已經在數據庫中,爲什麼(和whan)你需要堅持下去?你是什麼意思,「我想讓它[B]在測試中可見」?? – sleske 2009-09-24 15:08:57