Visual Studio 2008:无法正确检测泛型类中的单元测试方法

时间:2010-09-17 12:56:44

标签: c# visual-studio visual-studio-2008 unit-testing mstest

我有一堆存储库类,我想使用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可见,这会再次导致冗余。

有没有更好的方法来解决这种痛苦?我不想用大量的包装代码弄乱我的测试:(

1 个答案:

答案 0 :(得分:2)

是否有可能在测试声明中没有泛型,而是单独依赖IEntity,如:

IEntity GetById(int id);
IEnumerable<IEntity> GetAll();

如果这两个函数需要对IEntity进行任何实例化,则可以让Repository构造函数接受工厂对象。进行实例化将是工厂对象的工作。工厂的实例化方法只会返回一个IEntity,而子类可能会或可能不会被模板化。[/ p>