动态地将属性注入到方法中

时间:2009-09-16 20:14:20

标签: c# unit-testing

在单元测试期间,我需要使用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 个答案:

答案 0 :(得分:2)

如果不使用Test属性修饰Test方法会发生什么,而是使用Test为Test-methods的名称添加前缀。

请参阅this

NUnit也应该将它识别为测试方法,而不必用TestAttribute来装饰方法 但是,我已经用NUnit 2.4.7进行了测试,这似乎不再适用了。

无论如何,我不明白为什么这会困扰你?使用Test-Attribute修饰方法有什么问题?这只是明确表示它是一个测试。 我喜欢明确:)

答案 1 :(得分:0)

您可以使用TypeDescriptor吗?