MsTest - метод выполнения перед каждым тестом в сборке
Можно ли запустить конкретный метод перед каждым тестом в сборке?
Я знаю об атрибуте TestInitialize
, но этот атрибут имеет "класс scope". Если он определен в классе Test, он будет выполнен перед каждым тестом из этого класса.
Я хочу определить метод, который будет выполняться перед каждым тестом, определенным во всей сборке.
Ответы
Ответ 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 для каждого тестового примера.
Ответ 3
Вы хотите использовать [AssemblyInitialize]
.
Смотрите: Ссылка MSDN
или этот вопрос:
fooobar.com/questions/109238/...
Ответ 4
Ну не MSTest, создавая экземпляр класса для каждого теста? Это было мое понимание этого. В таком случае все, что вы вызываете из своего конструктора, - это код инициализации (для каждого теста по определению).
РЕДАКТИРОВАТЬ: Если это не сработает (что я все еще думаю, что это необходимо, потому что MSTest должен убедиться, что отдельные тестовые методы запуска изолированы), то TestInitialize
- ваш атрибут. Кстати, лучшее сравнение единиц измерения доступно на Ссылка на Codeplex
Ответ 5
Я думаю, что вы ищете атрибут ClassInitialize
.