以 Span 作为参数抛出异常的测试方法

Test method which throws an exception as has Span as a parameter

我想用 NUnit 的 Assert.Throws<> 测试一个方法。此方法的参数中有 Span。典型的方法类似于下面的代码:

[Test]
public void ShouldThrowExceptionIfSomething()
{
  // GIVEN
  var byteArray = ...;
  var mySpan = byteArray.AsSpan();

  // WHEN-THEN
  Assert.Throws<ArgumentException>(() => Foo.DoSomethingWithSpan(mySpan));
}

不幸的是,这段代码没有编译错误:

[CS8175] Cannot use ref local 'mySpan' inside an anonymous method, lambda expression, or query expression

我很感激任何关于测试这些方法的建议。

跨度是仅堆栈类型,不能被 lambda 捕获。

您需要在 lambda 中获取跨度:

var byteArray = ...;
Assert.Throws<ArgumentException>(() => Foo.DoSomethingWithSpan(byteArray.AsSpan()));