NUnit属性

时间:2011-06-15 12:04:30

标签: c# .net nunit

我正在使用NUnit并在我的一些测试中应用category属性:

[Category("FastTest")]

这些测试必须运行得非常快,不到10秒。 所以我也用

装饰它们
[Timeout(10000)]

现在的问题是:

我每次用 [Category(“FastTest”)] 装饰一个方法时,我怎么能这样做呢?它会在 [Timeout(1000)] 后自动装饰强>?

5 个答案:

答案 0 :(得分:3)

创建一个Resharper live-template,例如在写“catfast”时吐出两个属性。或者购买PostSharp并让posthart AOP-adorn标记所有标有指定类别的方法。

答案 1 :(得分:2)

我认为这不是一个好主意。

  1. 用于分组测试的类别属性,而不是用于设置测试期望。
  2. 其他开发人员如何知道,“FastTest”组的测试应该在10秒内完成?为什么不2秒?或者可能是100毫秒?
  3. 对于类别中的所有测试,您将坚持使用固定超时。如何设置一个测试2秒,其他测试10秒?
  4. 这样做不会节省太多时间。
  5. 当然你可以做到。 AOP。反射。但最简单的方法是 - 在一个测试夹具中对所有快速测试进行分组,并使用[Timeout]属性对其进行修饰。

答案 2 :(得分:0)

创建从TimeoutAttribute继承的自定义属性FastTest。然后,此属性将实现其自己的类别命名约定。这样的事情应该有效

public class FastTestAttribyte :TimeoutAttribute
{
    protected string categoryName;

    public FastTestAttribyte (int timeout):base(timeout)
   {
       categoryName = "FastTest";
   }

    public string Name { get return categoryName; }
}

修改

如果您对属性进行反编译,它将起作用

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple=true, Inherited=true)]
public class CategoryAttribute : Attribute
{
    // Fields
    protected string categoryName;

    // Methods
    protected CategoryAttribute()
    {
        this.categoryName = base.GetType().Name;
        if (this.categoryName.EndsWith("Attribute"))
        {
            this.categoryName = this.categoryName.Substring(0, this.categoryName.Length - 9);
        }
    }

    public CategoryAttribute(string name)
    {
        this.categoryName = name.Trim();
    }

    // Properties
    public string Name
    {
        get
        {
            return this.categoryName;
        }
    }
}

我认为Nunit会将反射用于atttribute的Name属性。

答案 3 :(得分:0)

我明白你的意思/需要,但我认为不可能。您是否希望IDE在添加一个或nUnit时添加另一个属性以了解类别是什么,并为某些类别的测试应用某些额外属性?

听起来不错,但万一听起来更像nUnit配置,而不是纯粹的c#属性链接,我不知道是否存在。

答案 4 :(得分:0)

Visual Studio允许您创建custom code snippets,它类似于Marius提到的Resharper模板,但不需要花费任何费用。