我已经阅读了nunit documentation on actions attributes并且我想创建一个可以在Test方法或Setup方法上使用的action属性(以避免在所有测试方法上重复该属性)。
我创建了以下类(非常类似于文档中的类,但我尝试允许所有内容):
[AttributeUsage(
AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Assembly,
AllowMultiple = true)]
public class CustomActionAttribute : Attribute, ITestAction
{
private string message;
public CustomActionAttribute(string message)
{
this.message = message;
}
public void BeforeTest(TestDetails details)
{
WriteToConsole("Before", details);
}
public void AfterTest(TestDetails details)
{
WriteToConsole("After", details);
}
public ActionTargets Targets
{
get { return ActionTargets.Default | ActionTargets.Suite | ActionTargets.Test; }
}
private void WriteToConsole(string eventMessage, TestDetails details)
{
Console.WriteLine(
"{0} {1}: {2}, from {3}.{4}.",
eventMessage,
details.IsSuite ? "Suite" : "Case",
message,
details.Fixture != null ? details.Fixture.GetType().Name : "{no fixture}",
details.Method != null ? details.Method.Name : "{no method}");
}
}
什么有效:
[Test, CustomAction("TEST")]
public void BasicAssert()
{
}
在nunit Test Runner Text输出面板中,我有
***** Test.CustomerT.BasicAssert
内部设置
案例:TEST之前,来自CustomerT.BasicAssert Case:TEST之后,来自CustomerT.BasicAssert。
什么行不通:
[SetUp, CustomAction("SETUP")]
public void CustomAttributeBeforeSetup()
{
System.Diagnostics.Debug.WriteLine("Inside Setup");
}
[Test]
public void BasicAssert()
{
}
在nunit Test Runner Text输出面板中,我有
***** Test.CustomerT.BasicAssert
内部设置
吗
如何创建可在Setup方法上执行的自定义属性?
答案 0 :(得分:0)
我假设您真正想要的是在整个测试夹具之前和之后运行BeforeTest和AfterTest。如果是这种情况,那么将该属性放在Fixture即测试类上,而不是将其放在SetUp方法上。在TestDetails中,您可以通过检查TestDetails.IsSuite来查看是否为测试或夹具运行了特定方法(即BeforeTest和AfterTest)。