Динамическое внедрение атрибута в метод - PullRequest
0 голосов
/ 17 сентября 2009

Во время модульного тестирования мне нужно украсить свои методы атрибутами Test, как показано ниже:

[Test] 
 public class when_1_is_passed : specifications_for_prime_test
    {
        public void should_return_false()
        {
            Assert.AreEqual(1,1);
        }
    }

Атрибуты [Test] означают, что метод является методом тестирования. Я хочу избавиться от атрибута [Test]. В 95% случаев все методы, определенные в наборе тестов, будут методами тестирования. Остальные 5% могут быть кодом инициализации и т. Д.

Во всяком случае, теперь мне как-то нужно динамически внедрить атрибут TestAttribute для всех методов. У меня есть следующий код, но я не вижу способ вставить атрибуты в метод.

public static void Configure<T>(T t)
        {
            var assemblyName = "TestSuite";
            var assembly = Assembly.Load(assemblyName);

            var assemblyTypes = assembly.GetTypes();

            foreach (var assemblyType in assemblyTypes)
            {
                if(assemblyType.BaseType == typeof(specifications_for_prime_test)) 
                {
                    // get all the methods from the class and inject the TestMethod attribute 

                    var methodInfos = assemblyType.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.DeclaredOnly); 
                    foreach(var methodInfo in methodInfos)
                    {
                        // now attach the TestAttribute to the method
                    }
                }
            }

            var methodsInfo = t.GetType().GetMethods();  
        }

ИЛИ может быть есть какая-то скрытая особенность инфраструктуры модульного тестирования, которая позволяет пользователю просто поместить атрибут в класс, и все методы внутри этого класса становятся тестовыми методами

Вот как выглядят тесты:

[TestFixture]
    public class specifications_for_prime_test
    {
        [SetUp]
        public void initialize()
        {
            UnitTestHelper.Configure(this); 
        }
    }

    public class when_1_is_passed : specifications_for_prime_test
    {
        public void should_return_false()
        {
            Assert.AreEqual(1,1);
        }
    }

Ответы [ 2 ]

2 голосов
/ 17 сентября 2009

Что произойдет, если вы не будете украшать методы Test атрибутом Test, а вместо этого будете добавлять префикс метода Test к Test.

См. это .

NUnit также должен распознавать его как Test-метод, без необходимости украшать метод с помощью TestAttribute Тем не менее, я протестировал это с NUnit 2.4.7, и это больше не похоже на правду.

Во всяком случае, я не вижу причины, почему это вас беспокоит? В чем проблема с украшением метода атрибутом Test-Attribute? Это просто дает понять, что это тест. Мне нравится откровенность:)

0 голосов
/ 17 сентября 2009

Можете ли вы использовать TypeDescriptor?

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