У меня есть блок модульного теста для класса 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()
. Как мне сделать эту работу?