Кажется, что передаваемый byte[]
- это другой массив. Они могут иметь одинаковые значения, но могут быть разными ссылками.
var testBytes = new byte[] { 0x1, 0x2, 0x3 };
mockService.testbyteint(testBytes).Returns(42);
Assert.Equal(mockService.testbyteInt(testBytes), 42);
Этот тест должен пройти, поскольку значение testBytes
указывает на ту же ссылку, которая использовалась для обозначения вызова с помощью Returns
, а также для фактический вызов, используемый в утверждении. Есть еще несколько примеров в документации Return для спецификаций c args .
Для случаев, когда у нас нет точной требуемой ссылки, мы можем использовать соответствий аргументов чтобы определить, каким значениям мы должны соответствовать:
var testBytes = new byte[] { 0x1, 0x2, 0x3 };
mockService.testbyteint(Arg.Is<byte[]>(bytes => bytes.SequenceEqual(new[] {0x1, 0x2, 0x3 })).Returns(42);
Assert.Equal(mockService.testbyteInt(testBytes), 42);
Другой вариант, когда мы не обращаем внимания на то, какой аргумент мы получаем, мы можем использовать ReturnsForAnyArgs
:
var testBytes = new byte[] { 0x1, 0x2, 0x3 };
mockService.testbyteint(null).ReturnsForAnyArgs(42);
Assert.Equal(mockService.testbyteInt(testBytes), 42);
Надеюсь, это поможет.