Я делал небольшое игрушечное веб-приложение на C # по аналогии с магазином Роба Коннери Asp.net MVC.
Я обнаружил, что у меня есть интерфейс репозитория, назовите его IFooRepository, с методами, скажем
IQueryable<Foo> GetFoo();
void PersistFoo(Foo foo);
И у меня есть три реализации этого: ISqlFooRepository, IFileFooRepostory и IMockFooRepository.
У меня также есть несколько тестовых случаев. То, что я хотел бы сделать, и еще не определился, как это сделать, - это запускать одинаковые тестовые случаи для каждой из этих трех реализаций и иметь зеленую галочку для каждого прохода теста для каждого типа интерфейса.
1010 *, например *
[TestMethod]
Public void GetFoo_NotNull_Test()
{
IFooRepository repository = GetRepository();
var results = repository. GetFoo();
Assert.IsNotNull(results);
}
Я хочу, чтобы этот метод тестирования запускался три раза, с некоторыми изменениями в среде, которые позволяют ему получать три различных типа репозитория. В настоящее время у меня есть три тестовых класса, которые отличаются только реализацией частного вспомогательного метода IFooRepository GetRepository (); Очевидно, это вонючий.
Однако я не могу просто удалить дублирование путем объединения методов вырезания и вставки, поскольку они должны присутствовать, быть открытыми и помечены как тест для запуска теста.
Я использую среду тестирования Microsoft и предпочел бы остаться с ней, если смогу. Но предложение о том, как это сделать, скажем, в MBUnit, также может представлять определенный интерес.