使用nunit自定义操作属性和Setup方法

时间:2014-07-23 15:33:20

标签: c# nunit custom-attributes

我已经阅读了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方法上执行的自定义属性?

1 个答案:

答案 0 :(得分:0)

我假设您真正想要的是在整个测试夹具之前和之后运行BeforeTest和AfterTest。如果是这种情况,那么将该属性放在Fixture即测试类上,而不是将其放在SetUp方法上。在TestDetails中,您可以通过检查TestDetails.IsSuite来查看是否为测试或夹具运行了特定方法(即BeforeTest和AfterTest)。