Shim SerialPort.Read метод (Char [], Int32, Int32) и заполнить параметр массива с помощью Microsoft Fakes - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть блок модульного теста для класса SerialPort, который выглядит следующим образом:

            const string RESPONSE = "12345678";
            int counter = 0;

            using (ShimsContext.Create())
            {
                ShimSerialPort.ConstructorString = (@this, port) =>
                {
                    var shim = new ShimSerialPort(@this)
                    {
                        Open = () => { Console.WriteLine($"{nameof(ShimSerialPort.Open)} called."); },
                        Close = () => { Console.WriteLine($"{nameof(ShimSerialPort.Close)} called."); },
                        DiscardInBuffer = () => { },
                        BytesToReadGet = () => RESPONSE.Length,
                        WriteString = (command) => { },
                        ReadChar = () => Convert.ToChar(RESPONSE.Substring(counter++, 1)),
                        ReadCharArrayInt32Int32 = (a1, a2, a3) => { Debugger.Break(); a1 = RESPONSE.ToCharArray(); return RESPONSE.Length; },
                        DisposeBoolean = (disposing) => { },
                        DsrHoldingGet = () => true,
                        WriteLineString = (data) => { },
                    };
                };

И код, который вызывает ReadCharArrayInt32Int32:

char[] cData = new char[8];
_ = m_serial485.Read(cData, 0, 8);

, который я проверил, используя Debugger.Break() в методе подкладки выше. Проблема в том, что установка a1 для нового массива символов в оболочке не влияет на вызывающего. После возврата метода вызывающий код все еще имеет пустой массив cData вместо значений из RESPONSE.ToCharArray(). Как мне сделать эту работу?

...