У меня есть куча классов репозитория, которые я хочу протестировать с использованием 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, что снова вызывает избыточность ..
Есть ли лучший подход для решения этой боли? Я не хочу загромождать свои тесты тоннами упаковочного кода: (