在Setup方法中使用非单元自定义动作属性

本文关键字:自定义 单元 属性 Setup 方法 | 更新日期: 2023-09-27 18:14:29

我已经阅读了关于动作属性的nunit文档,我想创建一个可以在测试方法或设置方法上使用的动作属性(以避免在所有测试方法上重复属性)。

我创建了以下类(与文档中的类非常相似,但我尝试允许所有内容):

    [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
内部设置
之前的Case: TEST, from 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方法上执行的自定义属性?

在Setup方法中使用非单元自定义动作属性

我假设您真正想要的是在整个测试夹具之前和之后运行BeforeTest和AfterTest。如果是这种情况,那么不要把它放在SetUp方法上,而是把属性放在Fixture上,即测试类。在TestDetails中,您可以通过检查TestDetails. issuite .

来查看特定方法(即BeforeTest和AfterTest)是否为测试或fixture运行。