我正在尝试使用ValueSourceAttribute进行测试。

这是一个例子

  [Test]
        public async Task TestDocumentsDifferentFormats(
            [ValueSource(nameof(Formats))] string format,
            [ValueSource(nameof(Documents))] IDocument document)
        {


有趣的是,Formats列表(第一个参数)可以完美工作,但是即使以相同的方式定义,它也无法解析第二个参数。

这是我定义文档静态列表的方式

  public class DocumentFactory
    {
        public static readonly List<IDocument> Documents=
            new List<IDocument>
            {
              // Init documents
            };
    }


但是,当我尝试运行测试时,会引发错误。

The sourceName specified on a ValueSourceAttribute must refer to a non null static field, property or method.


什么会导致此问题?我将不胜感激。

最佳答案

如果值是在另一个类中定义的,则还应提供其类型作为属性的参数

[Test]
public void TestOne(
    [ValueSource(nameof(Formats))] string format,
    [ValueSource(typeof(DocumentFactory), nameof(DocumentFactory.Documents))] IDocument document)
{
        document.Should().NotBeNull();
}


在不提供类型的情况下,NUnit将使用当前类的类型作为默认类型,这就是Formats起作用的原因。

10-02 11:23