Index: Constants.cs =================================================================== --- Constants.cs (revision 33) +++ Constants.cs (working copy) @@ -6,7 +6,12 @@ public class Constants { public const string FunctionalityAttribute = "NSpecify.Framework.FunctionalityAttribute"; + public const string InitializeFunctionalityAttribute = "NSpecify.Framework.InitializeFunctionalityAttribute"; + public const string CleanupFunctionalityAttribute = "NSpecify.Framework.CleanupFunctionalityAttribute"; public const string SpecificationAttribute = "NSpecify.Framework.SpecificationAttribute"; + public const string SetupResourcesAttribute = "NSpecify.Framework.SetupResourcesAttribute"; + public const string DestroyResourcesAttribute = "NSpecify.Framework.DestroyResourcesAttribute"; + public const string SuiteBuilders = "SuiteBuilders"; } } \ No newline at end of file Index: NSpecifySuiteExtension.cs =================================================================== --- NSpecifySuiteExtension.cs (revision 33) +++ NSpecifySuiteExtension.cs (working copy) @@ -22,20 +22,33 @@ // Create the fixture object. We could wait to do this when // it is needed, but we do it here for simplicity. Fixture = Reflect.Construct(fixtureType); - + fixtureSetUp = Reflect.GetMethodWithAttribute(fixtureType, Constants.InitializeFunctionalityAttribute, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, true); + fixtureTearDown = Reflect.GetMethodWithAttribute(fixtureType, Constants.CleanupFunctionalityAttribute, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, true); // Locate our test methods and add them to the suite using // the Add method of TestSuite. Note that we don't do a simple // Tests.Add, because that wouldn't set the parent of the tests. - foreach(MethodInfo method in fixtureType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) + foreach (MethodInfo method in fixtureType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) { Attribute spec = Reflect.GetAttribute(method, Constants.SpecificationAttribute, true); - if(spec != null) + if (spec != null) { - Add(new NUnitTestMethod(method)); + Add(new NSpeicifyTestMethod(method)); } } } #endregion } + + internal class NSpeicifyTestMethod : NUnitTestMethod + { + public NSpeicifyTestMethod(MethodInfo method) + : base(method) + { + setUpMethod = Reflect.GetMethodWithAttribute(FixtureType, Constants.SetupResourcesAttribute, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, true); + tearDownMethod = Reflect.GetMethodWithAttribute(FixtureType, Constants.DestroyResourcesAttribute, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, true); + } + } + + } \ No newline at end of file