2016-07-04 3 views
0

, как я могу изменить параметры атрибутов динамически (в режиме исполнения) в следующем коде (для TestFixture и TestConfiguration):Изменение атрибутов класса параметров динамически

[ 
    TestFixture("Setup 1"), 
    TestConfiguration("http://spiratest", "rin", "rin", 30, 924, 2577, 
    TestConfigurationAttribute.RunnerName.NUnit) 
] 
    public class SampleTestFixture 
    { 
     protected static int testFixtureState = 1; 

     [TestFixtureSetUp] 
     public void FixureInit() 
     { 
      //Set the state to 2 
      testFixtureState = 2; 
     } 

     [SetUp] 
     public void Init() 
     { 
      //Do Nothing 
     } 

     /// <summary> 
     /// Sample test that asserts a failure 
     /// </summary> 
     [ 
     Test, 
     TestCase(41681) 
     ] 
     public void _01_SampleFailure() 
     { 
      //Verify the state 
      Assert.AreEqual (2, testFixtureState, "*Real Error*: State not persisted"); 

      //Failure Assertion 
      Assert.AreEqual (1, 1, "Failed as Expected"); 
     } 
} 

мне нужно изменить параметры атрибутов для TestFixture и TestConfiguration на RunTime. (без использования константных параметров)

Как я могу изменить его отражением или аннотацией?

+0

Вы хотите изменить название теста? Зачем тебе это нужно? Я сомневаюсь, что это возможно, потому что даже если вы можете * изменить * значения, NUnit не узнает их, поскольку тесты уже созданы и запущены. – HimBromBeere

+0

Мне нужно изменить параметр в TestFixture вместо «Setup 1» – rinat

+0

Мне нужно изменить параметр в TestFixture вместо «Setup 1», чтобы быть строковыми параметрами, которые будут назначаться во время выполнения. – rinat

ответ

1

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

// find the fixtures 
// ... 
// provide the attributes and create the fixture 
var newTestInstance = Activator.CreateInstance(typeof(SampleTestFixture), theParams) 

При вызове члена с теми атрибутами, которые предоставляют информацию в пределах атрибута этого члена или конструктора, однако член (или конструктор) имеет уже называют со значениями, предоставленных этими атрибутами. Что вы хотите для них похож на это:

class MyClass { 
    int MyInt; 
    MyClass(int param) 
    { 
     MyInt = param; 
    } 
} 

Итак, когда вы обеспечить параметр конструктору его значение привязан к MyInt. Когда вы меняете значение атрибута, NUnit равно , не уведомляется в любом случае, поэтому он не будет повторно создавать ваш тест или даже изменить уже существующий. Оба были бы вредными. В первую очередь вы должны создать совершенно новый тест. Во втором случае вам нужно будет определить, какие тесты имеют уже запущены и повторно запускают те, у которых есть модифицированное значение.

Итак, что должно произойти, если вы измените значение TestFixture во время выполнения? Все тесты Shell будут повторно запущены с новыми значениями? Или только те, которые еще не были запущены?

+0

все тесты должны запускаться с новым значением. – rinat

+1

Ответ: «Это невозможно», но на самом деле у него, вероятно, есть более значимый вопрос, который он должен задавать, и почему он считает, что ему нужно это делать. Как бы то ни было, динамическое изменение кода, вероятно, не является ответом. :-) – Charlie

Смежные вопросы