Я не пользователь MSTest, но у вас, вероятно, есть несколько вариантов. Обычно с NUnit я бы использовал универсальный или параметризованный прибор, но я не уверен, имеет ли MSTest аналогичные возможности. В свете этого, вот как я мог бы сделать это с NUnit, в форме, которая должна быть воспроизводима с использованием любой среды модульного тестирования через шаблон метода шаблона .
Шаги:
- Определите абстрактный базовый класс с помощью
все тесты в нем
- положить в
абстрактный метод называется
CreateStorageManager (), который возвращает
IStorageManager (или любой другой
сопрягать две зависимости
реализовать)
- Подкласс прибора дважды
и обеспечить реализацию
CreateStorageManager (), который возвращает конкретный тип, который вы хотите использовать для запуска тестов.
Вот код для эквивалентной версии NUnit; Я уверен, что вы можете экстраполировать. Примечание: Правила наследования для MSTest могут немного отличаться от того, к чему я привык. Если это не сработает, попробуйте пометить базовый класс как тестовое устройство.
public abstract class PasswordManagerFixtureBase
{
protected abstract IStorageManager CreateStorageManager();
// all tests go in this fixture
[Test]
public void SomeTestOrOther()
{
var passwordManager = CreatePasswordManager();
// do test logic
}
private PasswordManager CreatePasswordManager()
{
// calls into subclass implementation to get instance of storage
IStorageManager storage = CreateStorageManager();
return new PasswordManager(storage);
}
}
// Runs the tests in the fixture base using XmlStorageManager
[TestFixture]
public class PasswordManager_XMLStorageManagerImplTests
{
protected override IStorageManager CreateStorageManager()
{
return new XMLStorageManager();
}
}
// Runs the tests in the fixture base using DbStorageManager
[TestFixture]
public class PasswordManager_DbStorageManagerImplTests
{
protected override IStorageManager CreateStorageManager()
{
return new DbStorageManager();
}
}
Может быть более элегантный способ сделать это с помощью MSTest, но это должно сработать.