【发布时间】:2010-09-16 22:08:10
【问题描述】:
我正在尝试在 Visual Studio 2010 中对我当前的项目使用单元测试。但是,我的类结构包含许多接口和抽象类继承关系。
如果两个类派生自同一个抽象类或接口,我希望能够在它们之间共享测试代码。我不确定该怎么做。我正在考虑为每个要测试的接口创建一个测试类,但我不确定将具体类提供给适用的单元测试的正确方法。
更新
好的,这是一个例子。假设我有一个接口 IEmployee ,它由抽象类 Employee 实现,然后由两个具体类 Worker 和 Employee 继承。 (代码如下)
现在假设我想创建适用于所有 IEmployee 或员工的测试。或者,为特定类型的员工创建特定测试。例如,我可能想要断言,对于任何 IEmployee 的实现,将 IEmployee.Number 设置为小于零的数字都会引发异常。我更愿意从任何 IEmployee 的角度编写测试,然后能够在 IEmployee 的任何实现上使用测试。
这是另一个例子。我可能还想断言,将任何员工的休假时间设置为小于零的值会引发错误。然而,我可能还希望有不同的测试适用于特定的具体版本的 Employee。假设我想测试 Worker 如果提供超过 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()。
【问题讨论】:
-
不清楚你想做什么。您谈论单元测试接口,但这没有意义。你到底想测试什么?您能否提供一个简短的对象层次结构示例,并指出您想在此层次结构中测试什么?
-
我不想对它自己的接口进行单元测试,但我希望能够将所有适用于接口的测试分组,以便我可以轻松地将所有这些测试应用于任何类实现接口。请参阅我添加到问题中的示例。
标签: unit-testing visual-studio-2010 inheritance interface