C # / VisualStudio: сортировка атрибутов для согласованности - есть подсказки? - PullRequest
4 голосов
/ 24 января 2012

У меня немного глупая проблема:

У меня большое количество модульных тестов, у всех из которых есть атрибуты метода, такие как:

    [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 ]

4 голосов
/ 24 января 2012

Откройте Macro Explorer - и вставьте этот код в модуль (прямо из моей маленькой коллекции макросов):

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 голос
/ 24 января 2012

Вы первый человек с таким желанием:)

Я бы организовал их вручную, но также, если вы ищете более надежное решение, я бы реализовал свойство в классе TestPropertyAttributeint Index { get; set; } и установите порядок, в котором я хочу их обработать.В этом случае вы можете контролировать, какие атрибуты читаются в коде отражения, который их читает.Вот как это делает NHibernate.

[TestProperty(TC.Name, "Some Test", 0)]
[TestProperty(TC.Requirement, "req203", 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...