Подтвердить что ты не робот

MsTest - метод выполнения перед каждым тестом в сборке

Можно ли запустить конкретный метод перед каждым тестом в сборке?

Я знаю об атрибуте TestInitialize, но этот атрибут имеет "класс scope". Если он определен в классе Test, он будет выполнен перед каждым тестом из этого класса.

Я хочу определить метод, который будет выполняться перед каждым тестом, определенным во всей сборке.

4b9b3361

Ответ 1

Я не уверен, что эта функция возможна в MsTest вне поля, как в других тестовых средах (например, MbUnit).

Если мне нужно использовать MsTest, то я решаю это, определяя абстрактный класс TestBase с атрибутом [TestInitialize], и ​​каждый тест, который нуждается в этом поведении, происходит из этого базового класса. В вашем случае каждый тестовый класс в вашей сборке должен наследовать от этой базы...

И, возможно, есть еще одно решение, вы можете создать свой собственный тестовый атрибут, но я еще не пробовал это...:)

Ответ 2

[TestInitialize()] - это то, что вам нужно.

private string dir;

[TestInitialize()]
public void Startup()
{
    dir = Path.GetTempFileName();
    MakeDirectory(ssDir);
}

[TestCleanup()]
public void Cleanup()
{
    ss = null;
    Directory.SetCurrentDirectory(Path.GetTempPath());

    setAttributesNormal(new DirectoryInfo(ssDir));
    Directory.Delete(ssDir, true);
}


[TestMethod]
public void TestAddFile()
{
    File.WriteAllText(dir + "a", "This is a file");
    ss.AddFile("a");
    ...
}

[TestMethod]
public void TestAddFolder()
{
    ss.CreateFolder("a/");
    ...
}

Это дает новый случайный временной путь для каждого теста и удаляет его, когда это делается. Вы можете проверить это, запустив его в debug и посмотрев на переменную dir для каждого тестового примера.

Ответ 4

Ну не MSTest, создавая экземпляр класса для каждого теста? Это было мое понимание этого. В таком случае все, что вы вызываете из своего конструктора, - это код инициализации (для каждого теста по определению).

РЕДАКТИРОВАТЬ: Если это не сработает (что я все еще думаю, что это необходимо, потому что MSTest должен убедиться, что отдельные тестовые методы запуска изолированы), то TestInitialize - ваш атрибут. Кстати, лучшее сравнение единиц измерения доступно на Ссылка на Codeplex

Ответ 5

Я думаю, что вы ищете атрибут ClassInitialize.