使用将 IOptions<T> 作为构造函数参数的 Autofixture 测试控制器
Test a controller using Autofixture that takes IOptions<T> as constructor parameter
控制器class:
private readonly DbSettings _docDbSettings;
public CoursesController(IOptions<DbSettings> docDbSettings)
{
if (docDbSettings == null) throw new ArgumentNullException(nameof(docDbSettings));
_docDbSettings = docDbSettings.Value;
}
控制器测试class:
public class CoursesControllerTests
{
private readonly IFixture _fixture;
private readonly CoursesController _coursesController;
private readonly DbSettings _docDbSettings;
public CoursesControllerTests()
{
_fixture = new Fixture().Customize(new AutoFakeItEasyCustomization());
// Need help here.
_docDbSettings = _fixture.Create<IOptions<DbSettings>>();
}
}
错误:
Cannot implicitly convert type 'Microsoft.Extensions.Options.IOptions<Infrastructure.DbSettings>' to 'Infrastructure.DbSettings'
任何线索!
提前致谢。
您似乎试图将 _fixture.Create<IOptions<DbSettings>>()
返回的 IOptions<DbSettings>
类型的对象分配给 DbSettings
类型的变量,而这些类型不是 兼容.
您可以将 _docDbSettings
的类型更改为 IOptions<DbSettings>
或使用 AutoFixture 创建一个 DbSettings
对象,方法是:
_docDbSettings = _fixture.Create<DbSettings>();
顺便说一下,很高兴知道 AutoFixture 可以作为 auto-mocking container 工作,这意味着您可以要求它创建您的 CourseController
的实例,AutoFixture 将确保提供参数对于所有构造函数依赖项,在本例中为 IOptions<DbSettings>
:
var systemUnderTest = _fixture.Create<CourseController>();
您可以在 Mark Seemann 的 this article 中阅读有关如何将此模式与 AutoFixture 结合使用的更多信息。
控制器class:
private readonly DbSettings _docDbSettings;
public CoursesController(IOptions<DbSettings> docDbSettings)
{
if (docDbSettings == null) throw new ArgumentNullException(nameof(docDbSettings));
_docDbSettings = docDbSettings.Value;
}
控制器测试class:
public class CoursesControllerTests
{
private readonly IFixture _fixture;
private readonly CoursesController _coursesController;
private readonly DbSettings _docDbSettings;
public CoursesControllerTests()
{
_fixture = new Fixture().Customize(new AutoFakeItEasyCustomization());
// Need help here.
_docDbSettings = _fixture.Create<IOptions<DbSettings>>();
}
}
错误:
Cannot implicitly convert type 'Microsoft.Extensions.Options.IOptions<Infrastructure.DbSettings>' to 'Infrastructure.DbSettings'
任何线索!
提前致谢。
您似乎试图将 _fixture.Create<IOptions<DbSettings>>()
返回的 IOptions<DbSettings>
类型的对象分配给 DbSettings
类型的变量,而这些类型不是 兼容.
您可以将 _docDbSettings
的类型更改为 IOptions<DbSettings>
或使用 AutoFixture 创建一个 DbSettings
对象,方法是:
_docDbSettings = _fixture.Create<DbSettings>();
顺便说一下,很高兴知道 AutoFixture 可以作为 auto-mocking container 工作,这意味着您可以要求它创建您的 CourseController
的实例,AutoFixture 将确保提供参数对于所有构造函数依赖项,在本例中为 IOptions<DbSettings>
:
var systemUnderTest = _fixture.Create<CourseController>();
您可以在 Mark Seemann 的 this article 中阅读有关如何将此模式与 AutoFixture 结合使用的更多信息。