• 利用Rhino Mock实现串口程序的单元测试


    原来Mock可以这样子用。

    1.   接口ISerialPort

        public interface ISerialPort
        {
            string PortName { get; }
            int BaudRate { get; }
            int DataBits { get; }
            Parity Party { get; }
            StopBits StopBits { get; }
            int BytesToRead { get; }
            bool IsOpen { get; }
            void Open();
            void Close();
            string ReadLine();
            int ReadByte();
            int Read(ref byte[] buffer, int offset, int count);
            string ReadTo(string p);
            void Write(byte[] data, int offset, int count);
        }
     
    2. 用Rhino Mock测试串口
            [TestMethod()]
            public void ReadAlarmTest()
            {
                MockRepository mock = new MockRepository();
                ISerialPort serialPort = mock.StrictMock<ISerialPort>();
                VSerialPort target = new VSerialPort(serialPort);
                string excepted ="1,1,1,";
                string actual = string.Empty;
                StringBuilder sb = new StringBuilder();
                target.OnReceiveData += (alarmNo) =>{ sb.Append(alarmNo);sb.Append(',');};
                using (mock.Record())
                {
                    byte[] data = GetAlarmData();
                    byte[] outData = new byte[data.Length];
                    serialPort.Expect(p => p.ReadByte()).Return(0x21);
                    serialPort.Expect(p => p.Write(new byte[] {1,0x64,0x0D}, 0, 3));
                    serialPort.Expect(p => p.BytesToRead).Return(data.Length);
                    serialPort.Expect(p => p.Read(ref outData, 0, outData.Length)).OutRef(data).Return(data.Length);
                    serialPort.Expect(p => p.BytesToRead).Return(0);
                }
                target.ReadAlarm();
                actual = sb.ToString();
                Assert.AreEqual(excepted, actual);
            }
            
            static byte[] GetAlarmData()
            {
                List<byte> data = new List<byte>();
                data.Add(1);
                data.AddRange(Encoding.ASCII.GetBytes("ALARM MON #01=001 \r\n$\r\n"));
                data.Add(1);
                data.AddRange(Encoding.ASCII.GetBytes("ALARM MON #01=001 \r\n$\r\n"));
                data.Add(1);
                data.AddRange(Encoding.ASCII.GetBytes("ALARM MON #01=001 \r\n$\r\n"));
                data.Add(1);
                data.AddRange(Encoding.ASCII.GetBytes("$\r"));
                data.Add(1);
                data.AddRange(Encoding.ASCII.GetBytes("000\r\n"));
                return data.ToArray();
            }
  • 相关阅读:
    apk反编译
    mysql 安装解读
    安卓=--确认
    安卓--界面--改变image view
    安卓--返回时,不丢失转态
    安卓--跳转
    安卓--菜单
    安卓--Toast
    设置网页上收藏夹的图标
    分帧标签
  • 原文地址:https://www.cnblogs.com/joe62/p/2392547.html
Copyright © 2020-2023  润新知