テスト:mockオブジェクト

6888 ワード

using System;

using System.Text;

using System.Threading;

using System.Messaging;



namespace QueueSpace

{



    // , mock 

    class Queue

    {

        public virtual object readMessage()

        {

            return null;

        }

    }



    //mock , 

    class TestQueue : Queue

    {

        private int index = 0;

        private object[] Data = { "hello","world"};

        public override object readMessage()

        {



            while (index < Data.Length)

            {

                object data = Data[index];

                index++;

                return data;

            }



            Thread.Sleep(60*60*60);

            return null;

        }

    }

    

    // 

    class WorkQueue : Queue

    {

        MessageQueue queue = null;



        public WorkQueue()

        {

            string queueName = ".\\Private$\\MSMQDemo";

            if (MessageQueue.Exists(queueName))

            {

                queue = new MessageQueue(queueName);

            }

            else

            {

                queue = MessageQueue.Create(queueName, false);

                queue.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);

            }

        }



        public override object readMessage()

        {

            System.Messaging.Message message = queue.Receive();

            string s =(string)message.Body;

            return (object)s;

        }

    }



    // 

    class QueueFactory

    {

        public static Queue makeQueue()

        {

           return new TestQueue();

        }

    }

}

 
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using QueueSpace;



namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            Queue queue = QueueFactory.makeQueue();

            while (true)

            {

                object msg = queue.readMessage();

                Console.WriteLine((string)msg);

            }

        }

    }

}