我有兩個控制器單元測試,每一個設置一個HttpClient的元類的設置()像下面執行:爲什麼不正確的HttpClient Grails中推倒單元測試之間
HttpClient.metaClass.execute = { HttpUriRequest request ->
<return expected data for my tests>
}
然後我試圖撕裂向下()元類的拆卸與下面的代碼:
protected void tearDown() {
super.tearDown()
GroovySystem.metaClassRegistry.removeMetaClass(HttpClient.class)
}
但是隻有我的單元測試一個傳遞,因爲來自HttpClient的回報是不正確的/出乎意料。如果我在兩個測試的metaClass.execute中添加兩個測試所需的邏輯,我不會收到測試失敗。然而,這很麻煩且不切實際,特別是在敏捷開發環境中。
我在做什麼錯在試圖拆除這個HttpClient元類註冊?我如何進一步解決這個問題?
我目前在CentOS 5安裝上使用grails 1.3.7。
編輯:我要澄清,我的問題是,元類倍率測試之間導致問題類,沒有測試的情況。我們一直在設置metaClass覆蓋,以便它將返回給定類中所有測試用例的正確數據。因此,測試類A具有用於其測試用例的metaClass數據,而測試類B具有用於其測試用例的metaClass數據。問題是,由於測試類A首先被測試,所以測試類B最終使用來自測試類A的metaClass定義並因此而失敗。
我的兩個測試類擴展了ControllerUnitTestCase。我試着在setUp()方法中直接在測試用例方法本身中添加你建議的代碼。在這兩種情況下,第一個被測試的類的.metaClass覆蓋被用在第二個測試類中。也許我應該澄清,我的問題不在測試用例之間,而是在測試類之間。 – twilbrand 2012-03-27 18:51:55
'registerMetaClass'在類和方法/測試用例之間起作用。我會認爲還有別的東西會導致你的問題。讓我確定我瞭解你的設置。 TestClass1(包含metaClassing和通行證)TestClass2(不包含metaClassing並失敗)? – 2012-03-27 18:58:00
關閉,但TestClass2包含metaClassing並失敗。如果我將printlns添加到TestClass1和TestClass2,我會在TestClass2的輸出中看到來自TestClass1的日誌 – twilbrand 2012-03-27 20:24:37