我想在Visual Studio 2010中的當前項目上開始使用單元測試。但是,我的類結構包含一些接口和抽象類繼承關係。單元測試抽象類和或接口
如果兩個類是從同一個抽象類或接口派生的,我希望能夠在它們之間共享測試代碼。我不確定如何完全做到這一點。我在考慮爲每個要測試的接口創建一個測試類,但我不確定將具體類提供給適用單元測試的正確方法。
更新
確定這裏是一個例子。假設我有一個接口IEmployee,它由抽象類Employee實現,然後由兩個具體類Worker和Employee繼承。 (代碼如下所示)
現在說我想創建適用於所有IEmployees或Employees的測試。或者,爲特定類型的員工創建特定測試。例如,我可能想要斷言將IEmployee.Number設置爲一個小於零的數字,任何IEmployee實現都會拋出異常。我更願意從任何IEmployee的角度編寫測試,然後能夠在任何IEmployee實現上使用測試。
這是另一個例子。我可能還想斷言,將任何員工的休假時間設置爲小於零的錯誤和誤差。但是我也可能想要應用於特定具體版本的員工的不同測試。說我想測試工人拋出,如果他們提供了更多的則14天度假的例外,但可以提供一個經理高達36
public interface IEmployee
{
string Name {get; set;}
int Number {get; set;}
}
public abstract class Employee:IEmploee
{
string Name {get; set;}
int Number {get;set;}
public abstract int VacationTime(get; set;)
}
public abstract class Worker:IEmployee
{
private int v;
private int vTime;
public abstract int VacationTime
{
get
{
return VTime;
}
set
{
if(value>36) throw new ArgumentException("Exceeded allowed vaction");
if(value<0)throw new ArgumentException("Vacation time must be >0");
vTime= value;
}
}
public void DoSomWork()
{
//Work
}
}
public abstract class Manager:IEmployee
{
public abstract int VacationTime
{
get
{
return VTime;
}
set
{
if(value>14) throw new ArgumentException("Exceeded allowed vaction");
if(value<0)throw new ArgumentException("Vacation time must be >0");
vTime= value;
}
}
public void DoSomeManaging()
{
//manage
}
}
所以我猜我尋找的是一個工作流程這將允許我嵌套單元測試。因此,例如,當我測試Manager類時,我想首先測試它是否通過Employee和IEmployee測試,然後測試特定成員,如DoSomeManaging()
。
你不清楚你在做什麼。你談論單元測試接口,但這沒有意義。你究竟想要測試什麼?你能提供一個簡短而簡明的對象層次結構例子,並指出你想在這個層次結構中測試什麼? – 2010-09-16 22:11:47
我不想單元測試它自己的接口,但我希望能夠將所有適用於接口的所有測試分組,因此我可以輕鬆地將所有這些測試應用於實現接口的任何類。看看我添加到我的問題的例子。 – 2010-09-16 23:22:39