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

问题描述 投票:0回答:1

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

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

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

不幸的是,此代码无法编译并显示错误:

[CS8175]无法在匿名方法内使用引用本地'mySpan',lambda表达式或查询表达式

我感谢有关测试这些方法的任何建议。

c# nunit nunit-3.0
1个回答
0
投票

跨度是仅堆栈类型,lambda无法捕获。

您需要将跨度放入lambda中:

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

© www.soinside.com 2019 - 2024. All rights reserved.