Тест, если класс имеет атрибут?

Я не думаю, что можно заставить PropertyGrid подкачивать к звездочкам, но Вы могли, возможно, использовать односторонний конвертер типов и модального редактора... как так:

using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
class Foo
{
    [TypeConverter(typeof(PasswordConverter))]
    [Editor(typeof(PasswordEditor), typeof(UITypeEditor))]
    public string Password { get; set; }

    // just to show for debugging...
    public string PasswordActual { get { return Password; } }
}
class PasswordConverter : TypeConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType)
    {
        return destinationType == typeof(string) ? "********" : 
            base.ConvertTo(context, culture, value, destinationType);


    }
}
class PasswordEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        IWindowsFormsEditorService svc = (IWindowsFormsEditorService)
            provider.GetService(typeof(IWindowsFormsEditorService));
        if (svc != null) {
            TextBox tb;
            Button btn;
            Form frm = new Form { Controls = {
                 (tb = new TextBox { PasswordChar = '*', Dock = DockStyle.Top,
                     Text = (string)value}),
                 (btn = new Button { Text = "OK", Dock = DockStyle.Bottom, DialogResult = DialogResult.OK})
            }, AcceptButton = btn};

            if (frm.ShowDialog() == DialogResult.OK)
            {
                value = tb.Text;
            }
        }
        return value;
    }
}
static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.Run(new Form {
            Controls = {
                new PropertyGrid {
                    Dock = DockStyle.Fill,
                    SelectedObject = new Foo { Password = "Bar"}
                }
            }
        });
    }
}
95
задан JoshRivers 4 August 2009 в 07:44
поделиться

2 ответа

проверьте, что

Attribute.GetCustomAttribute(typeof(ScheduleController),
    typeof(SubControllerActionToViewDataAttribute))

не является нулевым ( Assert.IsNotNull или аналогичный)

(причина, по которой я использую это, а не IsDefined в том, что в большинстве случаев я хочу также проверить некоторые свойства атрибута ....)

118
ответ дан 24 November 2019 в 05:48
поделиться

То же, что вы обычно проверяете для атрибута в классе.

Вот пример кода.

typeof(ScheduleController)
.IsDefined(typeof(SubControllerActionToViewDataAttribute), false);

Я думаю, во многих случаях проверка на наличие атрибута в модульном тесте неправильно. Поскольку я не использовал функциональные возможности субконтроллера MVC contrib, я не могу прокомментировать, подходит ли это в данном случае.

73
ответ дан 24 November 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: