Nunit Action Attribute构造函数被多次调用

时间:2015-03-24 08:18:40

标签: attributes nunit action action-filter

我已经创建了一个自定义属性调试它意识到它被调用了很多次,即使我只运行一次测试。似乎它被称为所有测试的属性:

        [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class |
                AttributeTargets.Interface | AttributeTargets.Assembly,
                AllowMultiple = true)]
    public class DisplayModeAttribute : Attribute, ITestAction
    {
        private readonly string screenSize;

        public DisplayModeAttribute(string screenSize)
        {
            this.screenSize = screenSize;
        }

        public void BeforeTest(TestDetails details)
        {
            PageFactory.SetWindowSize(screenSize);
        }

        public void AfterTest(TestDetails details)
        {

        }

        public ActionTargets Targets
        {
            get { return ActionTargets.Test | ActionTargets.Suite; }
        }
    }

我有三个测试使用此属性,其中xsmall值较小,为

  [DisplayMode("small")]

当我调试测试时,我注意到属性构造函数被调用所有值(小,大,xsmall)多次(大约40!)。对于最后的调用,它使用正确的值设置值,例如" small"

检查调用堆栈我看不到它被谁调用。

1 个答案:

答案 0 :(得分:1)

我不知道这个属性的细节,但看起来每个测试调用都要运行一次属性。如果是这种情况,那么实例化计数为40并不会听起来太不合理。

C#中的属性是面向方面编程的实现,这听起来是个好主意,但很快就会变得难以理解并且难以测试。

我建议不要使用属性,而是在测试设置中使用简单的方法调用,尽管不是"很酷"当他们来阅读测试套件时,对其他开发人员来说会更容易理解。

如果您真的坚持使用属性,请尝试更改

get { return ActionTargets.Test | ActionTargets.Suite; }

get { return ActionTargets.Suite; }