Attributeのテストとカスタマイズに関するコード
6187 ワード
『西夏普入門経典』より
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class XXXAttribute : Attribute
{
public XXXAttribute(System.Type testCase)
{
TestCase = testCase;
}
public readonly System.Type TestCase;
public void Test()
{
object o = Activator.CreateInstance(TestCase);
}
}
public class TestAnObject
{
public TestAnObject()
{
SomeCodeOrOther scooby = new SomeCodeOrOther();
if (scooby.Do() != 999)
throw new Exception("Pesky Kids");
}
}
[XXX(typeof(TestAnObject))]
public class SomeCodeOrOther
{
public SomeCodeOrOther()
{
}
public int Do()
{
return 999;
}
}
class Program
{
static void Main(string[] args)
{
Assembly A = Assembly.GetExecutingAssembly();
System.Type[] types = A.GetExportedTypes();
foreach (System.Type t in types)
{
Console.WriteLine("Checking type {0}", t.ToString());
object[] atts = t.GetCustomAttributes(typeof(XXXAttribute), false);
if (atts.Length == 1)
{
Console.WriteLine(" Found XXXAttribute: Running Test");
XXXAttribute tca = atts[0] as XXXAttribute;
try
{
tca.Test();
Console.WriteLine("PASSED");
}
catch (System.Exception ex)
{
Console.WriteLine("FAILED");
Console.WriteLine(ex.Message);
}
}
}
Console.Read();
}
}
}