Быстрый вопрос: как создать метод, который запускается только один раз перед запуском всех тестов в решении.
Метод инициализации глобального теста для MSTest
comment
Хотел бы я также знать :( В настоящее время у меня есть абстрактный базовый класс, от которого наследуется каждый TestClass. Внутри этого класса у меня есть метод TestInitialize. Проблема в том, что этот метод срабатывает каждый раз, когда запускается новый тест!
- person Pure.Krome   schedule 21.09.2009
comment
Пусть этот абстрактный базовый класс реализует статический конструктор. Он будет запущен только один раз перед запуском любого из тестов.
- person mglmnc   schedule 22.09.2009
Ответы (3)
Создайте общедоступный статический метод, украшенный ссылкой AssemblyInitialize. Платформа тестирования будет вызывать этот метод Setup один раз при выполнении теста:
[AssemblyInitialize()]
public static void MyTestInitialize(TestContext testContext)
{}
Для TearDown это:
[AssemblyCleanup]
public static void TearDown()
{}
ИЗМЕНИТЬ:
Еще одна очень важная деталь: класс, к которому относится этот метод, должен быть украшен [TestClass]
. В противном случае метод инициализации не будет запущен.
person
driis
schedule
15.10.2009
Если у вас есть тесты более чем в одной сборке, MyTestInitialize будет вызываться более одного раза для запуска теста.
- person BenCr; 15.06.2011
Это может быть неясно - это выполняется не для каждого теста, а для каждого теста RUN. Это означает, что если вы запускаете набор тестов, скажем, запуская все тесты в классе в одном тестовом прогоне или все тесты в сборке в одном тестовом прогоне, это выполняется ОДИН РАЗ для всех этих тестов в этом прогоне. Таким образом, они могли поделиться результатами/побочными эффектами этого метода или нет, если за один раз запускался только один тест.
- person bcr; 20.07.2020
Просто чтобы подчеркнуть, что @driis и @Malice сказали в принятом ответе, вот как должен выглядеть ваш класс инициализатора глобального теста:
namespace ThanksDriis
{
[TestClass]
class GlobalTestInitializer
{
[AssemblyInitialize()]
public static void MyTestInitialize(TestContext testContext)
{
// The test framework will call this method once -BEFORE- each test run.
}
[AssemblyCleanup]
public static void TearDown()
{
// The test framework will call this method once -AFTER- each test run.
}
}
}
person
Mass Dot Net
schedule
26.09.2019
Не правда ли (также) что класс с пометкой [TestInitialize] также будет выполняться перед запуском каждого теста? Выполняется ли AssemblyInitialize перед каждым запуском теста или только один раз за тестовый сеанс? [TestInitialize()] public void TestInitialize() { ... } [TestCleanup()] public void TestCleanup() { ... }
- person Allen; 22.04.2020
Посмотрите эту ссылку StackOverflow, чтобы получить краткий ответ о том, когда запускается код, украшенный
[TestInitialize]
: stackoverflow.com/a/23012750/165494
- person Mass Dot Net; 28.04.2020
Извините за кривое оформление...
/// <summary>
/// Use TestInitialize to run code before running each test
/// Runs before every test executes
/// </summary>
[TestInitialize()]
public void TestInitialize()
{
...
...
}
/// <summary>
/// Use TestCleanup to run code after each test has run
/// Runs after every test executes
/// </summary>
[TestCleanup()]
public void TestCleanup()
{
...
...
}
person
Allen
schedule
22.04.2020