Насмешливые атрибуты - C # - PullRequest
       14

Насмешливые атрибуты - C #

2 голосов
/ 26 ноября 2008

Я использую пользовательские атрибуты в проекте и хотел бы интегрировать их в свои юнит-тесты.

Теперь я использую Rhino Mocks для создания своих макетов, но я не вижу способа добавить к ним свои атрибуты (и параметры).

Я что-то пропустил или это невозможно? Другие насмешливые рамки? Или мне нужно создавать фиктивные реализации с моими атрибутами?

пример: у меня есть интерфейс в архитектуре плагина (IPlugin), и есть атрибут для добавления метаинформации в свойство. Затем я ищу свойства с этим атрибутом в реализации плагина для дополнительной обработки (сохраняя его значение, помечая как доступный только для чтения ...)

Теперь, когда я создаю макет, могу ли я легко добавить атрибут к свойству или самому экземпляру объекта?

РЕДАКТИРОВАТЬ: Я нашел сообщение с тем же вопросом -> ссылка . Ответ там не на 100%, а на Java ...

РЕДАКТИРОВАТЬ 2: Это можно сделать ... еще поискал (на SO) и нашел 2 связанных вопроса (+ ответы)

здесь и здесь

Теперь, это уже реализовано в том или ином фреймворке?

Ответы [ 3 ]

1 голос
/ 18 марта 2009

Почему вы не можете просто сделать что-то вроде:

var sut = new SomeRandomAttribute(RestrictionType.Local);
Assert.AreEqual("Yada yada yada", sut.Yada);

Если вы хотите протестировать код, который посещает все ваши типы и выполняет некоторые действия для каждого из найденных SomeRandomAttribute, я бы предложил вам разделить его при получении объектов MethodInfo, которые украшены вашим пользовательским атрибутом и операции, которые необходимо выполнить над этими объектами. Последнее должно быть легко протестировано с правильно настроенным объектом и атрибутом MethodInfo. Первое можно сделать с помощью специальных тестовых заполнителей для вашего атрибута, как предложено Джозефом.

1 голос
/ 26 ноября 2008

Вот пример того, как я тестировал пользовательские атрибуты. В этом случае у меня есть собственный атрибут, который используется в методе. В моем тестовом классе я создал метод-заполнитель, к которому применяется пользовательский атрибут. Затем я использовал отражение, чтобы получить экземпляр пользовательского атрибута.

[TestFixture] public class SomeRandomAttributeTest
{
    [SomeRandom(RestrictionType.Local)]
    public void PlaceholderMethodForAttribute() {throw new ApplicationException(this.ToString());}

    [Test]public void BlahBlahIsBlahTheBlah()
    {
        object[] attributes = this.GetType().GetMethod("PlaceholderMethodForAttribute").GetCustomAttributes(false);
        Assert.AreEqual(1, attributes.Length);
        Assert.IsInstanceOfType(typeof(SomeRandomAttribute), attributes[0]);

        Assert.AreEqual("Yada yada yada", ((SomeRandomAttribute) attributes[0]).Yada);

    }
}
0 голосов
/ 05 мая 2010

Зависит от того, что нужно тестировать:

  • Тестируя некоторую "функциональность" атрибута, если добавленный атрибут оказывает какое-то влияние на класс / метод, который он декорирует, вы можете создать фиктивный класс, который наследует IPlugin с этим атрибутом, и проверить на его поведение повлияло наличие или значение атрибута.
  • Если вы хотите проверить некоторые внутренние функции атрибута, просто создайте этот атрибут и используйте assert для проверки этого конечного результата.

Я не думаю, что вам здесь нужно издеваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...