将 IWrapTestMethod 属性应用于整个夹具?
Apply an IWrapTestMethod attribute to a whole fixture?
我有一个 NUnit IWrapTestMethod
属性:
public class OutputElapsedTimeAttribute : Attribute, IWrapTestMethod
{
public TestCommand Wrap(TestCommand command)
{
return new OutputElapsedTimeCommand(command);
}
}
和相应的 BeforeAndAfterTestCommand:
public class OutputElapsedTimeCommand : BeforeAndAfterTestCommand
{
private Stopwatch _sw;
public OutputElapsedTimeCommand(TestCommand innerCommand) : base(innerCommand)
{
BeforeTest = ctx => { _sw = Stopwatch.StartNew(); };
AfterTest = ctx =>
{
_sw.Stop();
ctx.OutWriter.WriteLineAsync($"Took: {_sw.ElapsedMilliseconds}ms");
};
}
}
当我将属性应用于测试方法时,命令被正确调用并执行。我希望能够将属性放在测试夹具上,并自动将其应用于测试夹具中的所有测试。怎么做?我在文档中找不到合适的内容。
该接口仅由 NUnit 在具有该接口属性的测试中调用。 NUnit 也可以调用包含每个测试的夹具上的属性,但它不会这样做,因此需要对 NUnit 本身进行增强。
作为解决方法,请考虑创建一个 Action Attribute
我有一个 NUnit IWrapTestMethod
属性:
public class OutputElapsedTimeAttribute : Attribute, IWrapTestMethod
{
public TestCommand Wrap(TestCommand command)
{
return new OutputElapsedTimeCommand(command);
}
}
和相应的 BeforeAndAfterTestCommand:
public class OutputElapsedTimeCommand : BeforeAndAfterTestCommand
{
private Stopwatch _sw;
public OutputElapsedTimeCommand(TestCommand innerCommand) : base(innerCommand)
{
BeforeTest = ctx => { _sw = Stopwatch.StartNew(); };
AfterTest = ctx =>
{
_sw.Stop();
ctx.OutWriter.WriteLineAsync($"Took: {_sw.ElapsedMilliseconds}ms");
};
}
}
当我将属性应用于测试方法时,命令被正确调用并执行。我希望能够将属性放在测试夹具上,并自动将其应用于测试夹具中的所有测试。怎么做?我在文档中找不到合适的内容。
该接口仅由 NUnit 在具有该接口属性的测试中调用。 NUnit 也可以调用包含每个测试的夹具上的属性,但它不会这样做,因此需要对 NUnit 本身进行增强。
作为解决方法,请考虑创建一个 Action Attribute