Я пишу набор тестов для библиотеки классов, используя C# и XUnit. В библиотеке есть ряд классов, которые реализуют интерфейс. Я мог бы просто скопировать и вставить одни и те же тесты для реализации интерфейса в каждый тестовый класс, но мне было интересно, есть ли более точное решение, использующее некоторый базовый класс тестов, который можно наследовать и запускать автоматически без вызова каждого метода по очереди в каждом тестовом классе ,
В этой статье по проекту кода показано, как это будет сделано в mstest с использованием абстрактного базового класса, помеченного TestClass . Резюме дано ниже. Однако я не могу понять, есть ли эквивалент, использующий xunit. Кто-нибудь знает, как к этому подойти? Документы xunit говорят, что в mstest нет эквивалента TestClass .
Интерфейс
public interface IDoSomething
{
int SearchString(string stringToSearch, string pattern);
}
Один из многих классов, реализующих интерфейс
public class ThisDoesSomething : IDoSomething
{
public int SearchString(string stringToSearch, string pattern);
{
// implementation
}
}
Базовый класс тестирования интерфейса
[TestClass]
public abstract class IDoSomethingTestBase
{
public abstract IDoSomething GetDoSomethingInstance();
[TestMethod]
public void BasicTest()
{
IDoSomething ids = GetDoSomethingInstance();
Assert.AreEqual("a_string", ids.SearchString("a_string", ".*");
}
}
Тестовый класс, который тестирует класс, реализующий интерфейс
[TestClass]
public class ThisDoesSomething_Tests : IDoSomethingTestBase
{
public override IDoSomething GetDoSomethingInstance()
{
return new ThisDoesSomething();
}
}