Hi. I have problem with testing of Identity microservice. I got an issue .Reflection.DefaultConstructorFinder' on type 'Volo.Abp.SettingManagement.SettingManagementStore' can be invoked with the available services and parameters: Cannot resolve parameter 'Volo.Abp.SettingManagement.ISettingRepository settingRepository' of constructor 'Void .ctor(Volo.Abp.SettingManagement.ISettingRepository, Volo.Abp.Guids.IGuidGenerator, Volo.Abp.Caching.IDistributedCache`1[Volo.Abp.SettingManagement.SettingCacheItem], Volo.Abp.Settings.ISettingDefinitionManager)'.
But in another microservice I did not get this issue. For exapmle in another microservice we mock settings: and when we mock our settings manager:
But in identity microservice it is not working and I do not understand what is wrong
How we can fix the problem? please help
- ABP Framework version: v6.0.0
- UI type: Angular
- DB provider: EF Core
10 Answer(s)
-
0
Hi,
Could you provide the full steps to reproduce the problem? thanks.
-
0
Hi,
Could you provide the full steps to reproduce the problem? thanks.
I have create a new (first) test in identity microservice
public sealed class SampleAppService_Tests : IdentityServiceApplicationTestBase { private readonly IUserAppService _userAppService; private ISettingManagementStore _abpSettingStore; protected override void BeforeAddApplication(IServiceCollection services) { _abpSettingStore = Substitute.For<ISettingManagementStore>(); services.AddSingleton(_abpSettingStore); base.BeforeAddApplication(services); } public SampleAppService_Tests() { _userAppService = GetRequiredService<IUserAppService>(); } [Fact] public async Task Test() { var test = await _userAppService.CreateUser(new UserCreateInput() { UserName = "TestUserName", Email = "test@test.com" }, ERole.External); } }
And got this error
Autofac.Core.DependencyResolutionException: An exception was thrown while activating Volo.Abp.Settings.DefaultValueSettingValueProvider -> Volo.Abp.SettingManagement.SettingStore -> Volo.Abp.SettingManagement.SettingManagementStore. ---> Autofac.Core.DependencyResolutionException: None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Volo.Abp.SettingManagement.SettingManagementStore' can be invoked with the available services and parameters: Cannot resolve parameter 'Volo.Abp.SettingManagement.ISettingRepository settingRepository' of constructor 'Void .ctor(Volo.Abp.SettingManagement.ISettingRepository, Volo.Abp.Guids.IGuidGenerator, Volo.Abp.Caching.IDistributedCache
1[Volo.Abp.SettingManagement.SettingCacheItem], Volo.Abp.Settings.ISettingDefinitionManager)'.` -
0
Hi,
You can try:
public sealed class SampleAppService_Tests : IdentityServiceDomainTestBase { private readonly IUserAppService _userAppService; private ISettingManagementStore _abpSettingStore; protected override void BeforeAddApplication(IServiceCollection services) { _abpSettingStore = Substitute.For<ISettingManagementStore>(); services.AddSingleton(_abpSettingStore); base.BeforeAddApplication(services); } public SampleAppService_Tests() { _userAppService = GetRequiredService<IUserAppService>(); } [Fact] public async Task Test() { var test = await _userAppService.CreateUser(new UserCreateInput() { UserName = "TestUserName", Email = "test@test.com" }, ERole.External); } }
-
0
hi, Why should we use IdentityServiceDomainTestBase for application layer tests?
-
0
If I use
IdentityServiceDomainTestBase
I got another error: `Autofac.Core.Registration.ComponentNotRegisteredException: The requested service 'AMSuisse.IdentityService.Interfaces.User.IUserAppService' has not be...Autofac.Core.Registration.ComponentNotRegisteredException The requested service 'AMSuisse.IdentityService.Interfaces.User.IUserAppService' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.`
-
0
Hi,
You can try:
public sealed class SampleAppService_Tests : IdentityServiceDomainTestBase { private readonly IUserAppService _userAppService; private ISettingManagementStore _abpSettingStore; protected override void BeforeAddApplication(IServiceCollection services) { _abpSettingStore = Substitute.For<ISettingManagementStore>(); services.AddSingleton(_abpSettingStore); base.BeforeAddApplication(services); } public SampleAppService_Tests() { _userAppService = GetRequiredService<IUserAppService>(); } [Fact] public async Task Test() { var test = await _userAppService.CreateUser(new UserCreateInput() { UserName = "TestUserName", Email = "test@test.com" }, ERole.External); } }
If I IdentityServiceDomainTestBase I can test only managers. But I need to test applications services.
-
0
Hi,
We will check it.
-
0
Hi,
You can try:
public abstract class IdentityServiceApplicationTestBase : IdentityServiceTestBase<IdentityServiceApplicationTestModule> { protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) { options.AddDataMigrationEnvironment(); } }
public class IdentityServiceApplicationTestModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { Configure<AbpBackgroundJobOptions>(options => { options.IsJobExecutionEnabled = false; }); Configure<AbpBackgroundWorkerOptions>(options => { options.IsEnabled = false; }); } }
- Add
Volo.Abp.SettingManagement.EntityFrameworkCore
toIdentityService.EntityFrameworkCore.Tests
project
[DependsOn( typeof(IdentityServiceTestBaseModule), typeof(IdentityServiceEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpEntityFrameworkCoreSqliteModule) )] public class IdentityServiceEntityFrameworkCoreTestModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { var sqliteConnection = CreateDatabaseAndGetConnection(); Configure<AbpDbContextOptions>(options => { options.Configure<IdentityServiceDbContext>(c => { c.DbContextOptions.UseSqlite(sqliteConnection); }); options.Configure<SettingManagementDbContext>(c => { c.DbContextOptions.UseSqlite(sqliteConnection); }); }); } private static SqliteConnection CreateDatabaseAndGetConnection() { var connection = new SqliteConnection("Data Source=:memory:"); connection.Open(); new IdentityServiceDbContext( new DbContextOptionsBuilder<IdentityServiceDbContext>().UseSqlite(connection).Options ).GetService<IRelationalDatabaseCreator>().CreateTables(); new SettingManagementDbContext( new DbContextOptionsBuilder<SettingManagementDbContext>().UseSqlite(connection).Options ).GetService<IRelationalDatabaseCreator>().CreateTables(); return connection; } }
- Add
-
0
-
0
Hi,
This is added after 7.0, you can ignore it