2010-09-17 71 views
2

我有一堆庫類的,我使用Visual Studio 2008年他們實現以下接口要進行單元測試: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... 
} 

然而,在RepositoryTestBase規定的測試方法不是由Visual Studio檢測到(因爲仿製藥的),使得這種方法沒用。爲了使它工作,我需要換基類的每一個方法,使他們到Visual Studio,這又導致裁員可見..

有沒有更好的辦法來解決這個痛苦?我不想弄亂我的測試與噸封裝代碼:(

回答

2

是否有可能不必在測試仿製藥申報,而是依靠IEntity孤獨,如:

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

如果這些兩個函數需要做IEntity的任何實例,你可以有存儲庫的構造函數接受一個工廠對象,這將是該工廠對象的工作做的實例。會有一個抽象基(或接口),用於其實例方法工廠剛返回IEntity,這可能會或可能不會是模板的子類。

相關問題