我正在使用NUnit并在我的一些测试中应用category属性:
[Category("FastTest")]
这些测试必须运行得非常快,不到10秒。 所以我也用
装饰它们[Timeout(10000)]
现在的问题是:
我每次用 [Category(“FastTest”)] 装饰一个方法时,我怎么能这样做呢?它会在 [Timeout(1000)] >后自动装饰强>?
答案 0 :(得分:3)
创建一个Resharper live-template,例如在写“catfast”时吐出两个属性。或者购买PostSharp并让posthart AOP-adorn标记所有标有指定类别的方法。
答案 1 :(得分:2)
我认为这不是一个好主意。
当然你可以做到。 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模板,但不需要花费任何费用。