我有一个愚蠢的问题:
我有大量的单元测试都有这样的方法属性:
[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插件) - 我只是想知道我是不是第一个有这个愿望的人。
答案 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)
你是第一个有这个愿望的人:)
我会手动安排它们,但是,如果您正在寻找更可靠的解决方案,那么我将在TestPropertyAttribute
类int Index { get; set; }
中实现一个属性并设置我想要它们的顺序处理。在这种情况下,您可以控制在读取它们的反射代码中读取属性的方式。
这就是NHibernate如何做到的。
[TestProperty(TC.Name, "Some Test", 0)]
[TestProperty(TC.Requirement, "req203", 1)]