單元測試中設定被測試類介面的值

2021-05-10 18:05:35 字數 987 閱讀 8520

有類宣告如下:

在單元測試中需要使用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...