XUnit 和 ASP.NET Core 1.0 的依赖注入

Dependency Injection with XUnit and ASP.NET Core 1.0

我正在尝试弄清楚如何将依赖项注入与 XUnit 一起使用。我的目标是能够将我的 ProductRepository 注入我的测试 class.

这是我正在尝试的代码:

public class DatabaseFixture : IDisposable
{
    private readonly TestServer _server;

    public DatabaseFixture()
    {
        _server = new TestServer(TestServer.CreateBuilder().UseStartup<Startup>());
    }

    public void Dispose()
    {
        // ... clean up test data from the database ...
    }
}

public class MyTests : IClassFixture<DatabaseFixture>
{
    DatabaseFixture _fixture;
    public ICustomerRepository _repository { get; set; }

    public MyTests(DatabaseFixture fixture, ICustomerRepository repository)
    {
        _fixture = fixture;
        _repository = repository;
    }
}

错误如下: 以下构造函数参数没有匹配的夹具数据(ICustomerRepository 存储库)

这让我相信 XUnit 不支持依赖注入,只有当它是 Fixture 时才支持。

谁能告诉我一种在我的测试 class 中使用 XUnit 获取 ProductRepository 实例的方法?我相信我正在正确启动测试服务器,因此 Startup.cs 运行并配置 DI。

好吧,我认为无法访问 SUT 的容器。老实说,我不太明白你为什么要这样做。您将希望完全控制您的 SUT。这意味着你想提供你自己的依赖项来注入。

而且,你可以!

_server = new TestServer(TestServer.CreateBuilder(null, app =>
{
    app.UsePrimeCheckerMiddleware();
},
services =>
{
    services.AddSingleton<IPrimeService, NegativePrimeService>();
    services.AddSingleton<IPrimeCheckerOptions, PrimeCheckerOptions>();
}));

CreateBuilder 为此提供重载。出于同样的原因,您需要提供配置和应用程序配置(原因是您希望完全控制您的 SUT)。如果您有兴趣,我按照 this 文章制作了上面的示例。如果你愿意,我也可以将示例上传到我的 GitHub?

如果有帮助请告诉我。

更新 GitHub 样本:https://github.com/DannyvanderKraan/ASPNETCoreAndXUnit