C#/ Visual Studio:对属性进行排序以保持一致性 - 任何提示?

时间:2012-01-24 14:32:56

标签: c# visual-studio attributes

我有一个愚蠢的问题:

我有大量的单元测试都有这样的方法属性:

    [TestMethod]
    [Owner("me")]
    [Description("It tests something.")]
    [TestProperty(TC.Name, "Some Test")]
    [TestProperty(TC.Requirement, "req203")]
    [TestProperty(TC.Reviewer, "someguy")]
    [TestProperty(TC.Environment, "MSTest")]
    [TestProperty(TC.CreationDate, "24.01.2012")]
    [TestProperty(TC.InternalTcId, "{9221A494-2B31-479D-ADE6-D4773C2A9B08}")]
    public void TestSomething()
    { ... }

(如果您想知道:这些属性用于自动化测试和需求覆盖范围......)

现在,不幸的是,这些属性在大多数测试方法中处于不同的顺序 - 这使得审查等等有点麻烦。所以我正在寻找一种订购它们的方法..

除了手动重新排列之外,您还知道其他任何方式吗?

(我考虑过编写一些VS插件) - 我只是想知道我是不是第一个有这个愿望的人。

2 个答案:

答案 0 :(得分:4)

打开宏资源管理器 - 将此代码粘贴到一个模块中(它直接来自我自己的一小部分宏):

Sub Sort()
    Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
    If selection Is Nothing Or String.IsNullOrWhiteSpace(selection.Text) Then
        Exit Sub
    End If

    Dim lines As String() = selection.Text.Split(vbCrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)

    If lines.Length <= 1 Then Exit Sub

    lines = lines.OrderBy(Function(s As String) s, StringComparer.CurrentCulture).ToArray()
    DTE.UndoContext.Open("Sort Lines")

    selection.Insert(String.Join(vbCrLf, lines))
    selection.SmartFormat()

    DTE.UndoContext.Close()
    DTE.StatusBar.Text = "Sort Lines complete"

    selection.SmartFormat()
End Sub

(只是编辑它作为尝试/结束尝试不是真的正确 - 所以我把它拿出来)

现在,您可以在VS中绑定此宏的快捷方式 - 它使用Linq OrderBy使用当前区域性的字符串比较器对当前所选文本块的行进行排序。因此,它应该相应地将属性组合在一起。

如果你需要一些上下文敏感的东西(即用不同数量的参数调用相同的属性) - 那么你需要做更多的工作。

答案 1 :(得分:1)

你是第一个有这个愿望的人:)

我会手动安排它们,但是,如果您正在寻找更可靠的解决方案,那么我将在TestPropertyAttributeint Index { get; set; }中实现一个属性并设置我想要它们的顺序处理。在这种情况下,您可以控制在读取它们的反射代码中读取属性的方式。 这就是NHibernate如何做到的。

[TestProperty(TC.Name, "Some Test", 0)]
[TestProperty(TC.Requirement, "req203", 1)]