如何在以下代码中动态更改属性参数(在运行时)(对于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");
}
}
我需要在RunTime上更改TestFixture和TestConfiguration的属性参数。(不使用const参数)
如何通过反射或注释来改变它?
答案 0 :(得分: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所有测试?或者只是那些到目前为止还未运行过的人?