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