【发布时间】:2019-03-01 14:23:16
【问题描述】:
我正在尝试模拟没有“out”或“ref”参数的 void 方法,但我无法模拟它。 我想修改模拟函数中的参数
public interface IRandomNumberGenerator
{
void NextBytes(byte[] buffer);
}
var randomImplementation = Substitute.For<IRandomNumberGenerator>();
randomImplementation.When(x => x.NextBytes(Arg.Any<byte[]>())).Do(x =>
{
x[0] = new byte[] {0x4d, 0x65, 0x64, 0x76};
});
但是当我运行这个测试时得到了错误:
NSubstitute.Exceptions.ArgumentIsNotOutOrRefException: '无法设置 参数 0 (Byte[]) 因为它不是 out 或 ref 参数。'
还有没有其他可能改变void方法中的参数?
【问题讨论】:
-
您似乎想要替换整个数组,这当然需要参数是 ref 或 out。但是,您可以尝试替换数组 elements.
-
如何将
buffer转换为一个对象(例如,具有bytes数组属性)并像buffer.bytes = new byte[]{...}here's 一样访问它在C# 中传递对象的工作原理。 -
您将如何调用该代码?你能分享你打电话给
NextBytes的部分吗? -
@HimBromBeere 我有两个实现,一个是 Random.NextBytes(),第二个是更安全的加密所以调用这样的核心是这样的: var bytesArray = new byte[bytesize]; _randomNumberGenerator.NextBytes(bytesArray);
-
问题是无论你的生成器实际做什么,除非
bytesArray没有通过 ref 传递,否则调用NextBytes的代码根本无法识别它。
标签: c# nsubstitute