namespace unit
{
    public delegate void it();

    public delegate void because();

    public delegate void context();

    public abstract class runner<SUT> : run
    {
        static protected SUT sut { get; private set; }

        public override void initialize()
        {
            context();
            sut = create_sut();
            after_create_sut();
            because();
        }

        protected virtual void after_create_sut() {}

        protected abstract SUT create_sut();
    }
}