有類宣告如下:
在單元測試中需要使用testa.test屬性,並為其賦值。
因為itest介面和testa.test屬性都是私有的,為了在單元測試中使用它們,需要為其生成專用訪問器。
然後宣告乙個類a繼承並實現介面,最後例項化類a為testa.test屬性賦值,並呼叫。
運 行測試後,發現測試失敗了,錯誤資訊為:型別「serviceretrievetest.testatest+a」的物件無法轉換為型別 「platformclasslibrary.testa+itest」。錯誤發生在target.test = new a();這個語句上,雖然類a繼承了介面,但是itest介面與他的專用訪問器itest_accessor之間並不是簡單繼承關係,無法相互轉化,導致 測試失敗。
研究後發現乙個解決方法
解決方法很簡單,就是將itest介面宣告為pubic,這樣在測試**宣告類a就可以直接繼承這個介面。
再次執行測試,發現target.test = new a();這個語句可順利執行,測試成功。
但是,這個方法的缺點在於,介面itest只是類testa的內部使用的介面,現在卻將其暴漏在外部,有些不理想。
2009-11-6更新
找到乙個相對完美的解決方案。
可以將介面在命名空間下宣告為internal,即宣告為內部介面。同時在被測試的專案中新增system.runtime.compilerservices.internalsvisibleto標籤,該標籤表示該項目的內部成員可向某一專案公開,如[assembly: system.runtime.compilerservices.internalsvisibleto("servicetest")]
這樣就可以在測試專案中使用用internal宣告的**。
在測試**時就可以繼承itest介面並實現。
注意繼承時要同時繼承itest介面和他的專用訪問器itest_accessor介面。
測試的類宣告如下
然後用下面的**進行測試
執行,測試成功通過。
單元測試中Assert類
一 assert類的使用 1 assert類所在的命名空間為microsoft.visualstudio.testtools.unittesting 在工程檔案中只要引用microsoft.visualstudio.qualitytools.unittestframework.dll就可以使用了。2...
MAX值 單元測試
1 include2 using namespace std 3int largest int list,int length list 求最大值的函式,4int main 516 cout 請輸入 lenght 個整數 17for i 0 i lenght i 1821 cout 這個陣列的最大值...
Spring單元測試類
public class unittestbase public unittestbase string springxmlpath 在test方法執行前執行 before public void before trycatch exception ex 在test方法執行後執行 after pub...