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
我正在尝试弄清楚如何将依赖项注入与 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