Пропустить метод SetUp только для определенного теста в NUnit?
У меня есть тест, где мне не нужно запускать метод SetUp
(приписываемый [SetUp]
) перед запуском теста. Мне нужен метод SetUp
для других тестов.
Есть ли другой атрибут, который можно использовать, или способ, основанный на неатрибуте, для достижения этого?
Ответы
Ответ 1
Вы должны создать новый класс для этого теста, который имеет только настройку (или отсутствие настройки), которая ему нужна.
В качестве альтернативы, вы можете отключить установочный код в методе, который вызовут все остальные тесты, но я не рекомендую этот подход.
Ответ 2
Вы также можете добавить категорию и просмотреть список категорий в своей настройке:
public const string SKIP_SETUP = "SkipSetup";
[SetUp]
public void Setup(){
if (!CheckForSkipSetup()){
// Do Setup stuff
}
}
private static bool CheckForSkipSetup() {
ArrayList categories = TestContext.CurrentContext.Test
.Properties["_CATEGORIES"] as ArrayList;
bool skipSetup = categories != null && categories.Contains( SKIP_SETUP );
return skipSetup ;
}
[Test]
[Category(SKIP_SETUP)]
public void SomeTest(){
// your test code
}
Ответ 3
Основной SetUp
можно использовать в базовом классе:
[SetUp]
public virtual void SetUp()
{
// Set up things here
}
... и затем переопределить его в классе, где у вас есть тесты, которые не должны запускать код SetUp
:
[SetUp]
public override void SetUp()
{
// By not calling base.SetUp() here, the base SetUp will not run
}
Ответ 4
Вот код, который я предлагаю для выполнения того, что вы хотите:
public const string SKIP_SETUP = "SkipSetup";
private static bool CheckForSkipSetup()
{
string category = string.Empty;
var categoryKeys = TestContext.CurrentContext.Test.Properties.Keys.ToList();
if (categoryKeys != null && categoryKeys.Any())
category = TestContext.CurrentContext.Test.Properties.Get(categoryKeys[0].ToString()) as string;
bool skipSetup = (!string.IsNullOrEmpty(category) && category.Equals(SKIP_SETUP)) ? true : false;
return skipSetup;
}
[SetUp]
public void Setup()
{
// Your setup code
}
[Test]
public void WithoutSetupTest()
{
// Code without setup
}
[Test]
[Category(SKIP_SETUP)]
public void CodeWithSetupTest()
{
// Code that require setup
}
Ответ 5
Я не верю, что вы можете это сделать, это связано с пониманием того, какой тест должен был запускаться, и я не думаю, что это возможно.
Я предлагаю вам поместить его в другую [TestFixture]
Ответ 6
Вот код, который я предлагаю для выполнения того, что вы хотите.
public const string SKIP_SETUP = "SkipSetup";
Теперь добавьте следующий метод:
private static bool CheckForSkipSetup()
{
var categories = TestContext.CurrentContext.Test?.Properties["Category"];
bool skipSetup = categories != null && categories.Contains("SkipSetup");
return skipSetup;
}
Теперь проверьте условие следующим образом:
[SetUp]
public async Task Dosomething()
{
if (!CheckForSkipSetup())
{
}
}
Используйте их в тестовых примерах следующим образом:
[Test]
[Category(SKIP_SETUP)]
public async Task Mywork()
{
}