我有一堆存储库类,我想使用Visual Studio 2008进行单元测试。它们实现了以下接口:
public interface IRepository<TEntity> where TEntity : IEntity
{
/// <summary>
/// Get entity by ID
/// </summary>
/// <param name="id">The ID</param>
/// <returns></returns>
TEntity GetById(int id);
/// <summary>
/// Get all entities
/// </summary>
/// <returns></returns>
IEnumerable<TEntity> GetAll();
}
现在我可以为我拥有的每个存储库编写一个完整的测试类。但是为了最大限度地减少冗余,我想编写一个基本测试类,其中包含主要的“通用”测试方法。这将允许我为每个存储库编写一个简单的子类,如下所示:
[TestClass]
public class EmployeeRepositoryTest : RepositoryTestBase<Employee>
{
// all test methods are inherited from the base class
// additional tests could be added here...
}
但是,Visual Studio未检测到RepositoryTestBase中定义的测试方法(因为泛型),使得这种方法无用。为了使它工作,我需要包装基类的每个方法,使它们对Visual Studio可见,这会再次导致冗余。
有没有更好的方法来解决这种痛苦?我不想用大量的包装代码弄乱我的测试:(
答案 0 :(得分:2)
是否有可能在测试声明中没有泛型,而是单独依赖IEntity,如:
IEntity GetById(int id);
IEnumerable<IEntity> GetAll();
如果这两个函数需要对IEntity进行任何实例化,则可以让Repository构造函数接受工厂对象。进行实例化将是工厂对象的工作。工厂的实例化方法只会返回一个IEntity,而子类可能会或可能不会被模板化。[/ p>