Возможно ли иметь базовый класс общего теста для базовых тестов в Visual Studio 2008?
Если базовый абстрактный тестовый класс не является универсальным , все его базовые методы, отмеченные [TestMethod]
, должным образом наследуются в производных классах и выполняются в Visual Studio. Если базовый класс универсальный , то Visual Studio не выполняет эти методы в производных классах.
Представьте, что у вас есть класс парсеров, реализующих этот интерфейс (упрощенно):
// parses the input stream into an
// instance of T
interface IParser<T>
{
IParserResult<T> Parse(byte[] input);
}
И представьте, что у вас есть несколько анализаторов, которые могут анализировать определенный поток:
class HeaderParser : IParser<T> { ... }
class SomeOtherParser : IParser<T> { ... }
... many more ...
Чтобы проверить функциональность каждого анализатора, общий шаблон тестирования может быть извлечен в абстрактный класс, подобный этому:
[TestClass]
abstract class ParserTest<T>
{
[TestMethod]
public void TestParser()
{
// 1. init parser
var parser = new T();
// 2. get data
var input = GetInputData();
// 3. parse
var result = parser.Parse(input);
// 4. make common assertions
Assert.AreEqual(ParserResultType.Success, result.Type);
Assert.AreEqual(input.Length, result.NextDataOffset);
// 5. specific validation
Validate(result.Value);
}
protected abstract byte[] GetInputData();
protected abstract void Validate(T result);
}
Если этот класс является универсальным и абстрактным, то метод TestParser
не будет выполняться как модульный тест для производных классов.