Define CollectionFixture in each test project.

Because: xUnit collection definitions must be in the same assembly as the test that uses them.
pull/3982/head
maliming 6 years ago
parent ba6689f238
commit 06d845e3ca

@ -16,7 +16,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -39,7 +39,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -62,7 +62,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -85,7 +85,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -108,7 +108,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -131,7 +131,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB.Tests"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -139,6 +139,37 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MyProjectNameEntityFrameworkCoreTestModule",
"MyProjectNameMongoDbTestModule"
);
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
"MyCompanyName.MyProjectName.MongoDB",
"MyProjectNameEntityFrameworkCoreCollectionFixtureBase",
"MyProjectNameMongoDbCollectionFixtureBase"
);
//MyCompanyName.MyProjectName.Application.Tests
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
"MyCompanyName.MyProjectName.MongoDB",
"MyProjectNameEntityFrameworkCoreCollectionFixtureBase",
"MyProjectNameMongoDbCollectionFixtureBase"
);
//MyCompanyName.MyProjectName.Web.Tests
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
"MyCompanyName.MyProjectName.MongoDB",
"MyProjectNameEntityFrameworkCoreCollectionFixtureBase",
"MyProjectNameMongoDbCollectionFixtureBase"
);
}
private void ChangeProjectReference(
@ -165,13 +196,13 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
throw new ApplicationException($"Could not find the '{oldReference}' reference in the project '{targetProjectFilePath}'!");
}
private void ChangeModuleDependency(
private void ChangeNamespaceAndKeyword(
ProjectBuildContext context,
string targetModuleFilePath,
string oldNamespace,
string newNamespace,
string oldModuleName,
string newModuleName)
string oldKeyword,
string newKeyword)
{
var file = context.GetFile(targetModuleFilePath);
@ -185,9 +216,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
lines[i] = $"using {newNamespace};";
}
else if (lines[i].Contains(oldModuleName))
else if (lines[i].Contains(oldKeyword))
{
lines[i] = lines[i].Replace(oldModuleName, newModuleName);
lines[i] = lines[i].Replace(oldKeyword, newKeyword);
}
}
@ -216,4 +247,4 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
throw new ApplicationException("Could not find the 'Default' connection string in appsettings.json file!");
}
}
}
}

@ -0,0 +1,11 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameApplicationCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase
{
}
}

@ -10,6 +10,7 @@ namespace MyCompanyName.MyProjectName.Samples
* (like IIdentityUserAppService here).
* Only test your own application services.
*/
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleAppServiceTests : MyProjectNameApplicationTestBase
{
private readonly IIdentityUserAppService _userAppService;
@ -29,5 +30,16 @@ namespace MyCompanyName.MyProjectName.Samples
result.TotalCount.ShouldBeGreaterThan(0);
result.Items.ShouldContain(u => u.UserName == "admin");
}
[Fact]
public async Task Initial_Data_Should_Contain_Admin_User2()
{
//Act
var result = await _userAppService.GetListAsync(new GetIdentityUsersInput());
//Assert
result.TotalCount.ShouldBeGreaterThan(0);
result.Items.ShouldContain(u => u.UserName == "admin");
}
}
}

@ -0,0 +1,11 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameDomainCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase
{
}
}

@ -10,6 +10,7 @@ namespace MyCompanyName.MyProjectName.Samples
* (like IdentityUserManager here).
* Only test your own domain services.
*/
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleDomainTests : MyProjectNameDomainTestBase
{
private readonly IIdentityUserRepository _identityUserRepository;

@ -0,0 +1,10 @@
using Xunit;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameEntityFrameworkCoreCollection : ICollectionFixture<MyProjectNameEntityFrameworkCoreFixture>
{
}
}

@ -0,0 +1,10 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
public class MyProjectNameEntityFrameworkCoreCollectionFixtureBase : ICollectionFixture<MyProjectNameEntityFrameworkCoreFixture>
{
}
}

@ -0,0 +1,12 @@
using System;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
public class MyProjectNameEntityFrameworkCoreFixture : IDisposable
{
public void Dispose()
{
}
}
}

@ -14,6 +14,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Samples
* (like default AppUser repository IRepository<AppUser, Guid> here).
* Only test your custom repository methods.
*/
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleRepositoryTests : MyProjectNameEntityFrameworkCoreTestBase
{
private readonly IRepository<AppUser, Guid> _appUserRepository;

@ -1,10 +0,0 @@
using Xunit;
namespace MyCompanyName.MyProjectName.MongoDB
{
[CollectionDefinition(Name)]
public class MongoTestCollection : ICollectionFixture<MongoDbFixture>
{
public const string Name = "MongoDB Collection";
}
}

@ -0,0 +1,10 @@
using Xunit;
namespace MyCompanyName.MyProjectName.MongoDB
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameMongoCollection : MyProjectNameMongoDbCollectionFixtureBase
{
}
}

@ -0,0 +1,10 @@
using MyCompanyName.MyProjectName.MongoDB;
using Xunit;
namespace MyCompanyName.MyProjectName.MongoDB
{
public class MyProjectNameMongoDbCollectionFixtureBase : ICollectionFixture<MyProjectNameMongoDbFixture>
{
}
}

@ -3,7 +3,7 @@ using Mongo2Go;
namespace MyCompanyName.MyProjectName.MongoDB
{
public class MongoDbFixture : IDisposable
public class MyProjectNameMongoDbFixture : IDisposable
{
private static readonly MongoDbRunner MongoDbRunner = MongoDbRunner.Start();
public static readonly string ConnectionString = MongoDbRunner.ConnectionString;
@ -13,4 +13,4 @@ namespace MyCompanyName.MyProjectName.MongoDB
MongoDbRunner?.Dispose();
}
}
}
}

@ -12,9 +12,9 @@ namespace MyCompanyName.MyProjectName.MongoDB
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var connectionString = MongoDbFixture.ConnectionString.EnsureEndsWith('/') +
"Db_" +
Guid.NewGuid().ToString("N");
var connectionString = MyProjectNameMongoDbFixture.ConnectionString.EnsureEndsWith('/') +
"Db_" +
Guid.NewGuid().ToString("N");
Configure<AbpDbConnectionOptions>(options =>
{
@ -22,4 +22,4 @@ namespace MyCompanyName.MyProjectName.MongoDB
});
}
}
}
}

@ -13,7 +13,7 @@ namespace MyCompanyName.MyProjectName.MongoDB.Samples
* (like default AppUser repository IRepository<AppUser, Guid> here).
* Only test your custom repository methods.
*/
[Collection(MongoTestCollection.Name)]
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleRepositoryTests : MyProjectNameMongoDbTestBase
{
private readonly IRepository<AppUser, Guid> _appUserRepository;

@ -0,0 +1,7 @@
namespace MyCompanyName.MyProjectName
{
public static class MyProjectNameTestConsts
{
public const string CollectionDefinitionName = "MyProjectName collection";
}
}

@ -0,0 +1,11 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameWebCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase
{
}
}

@ -4,6 +4,7 @@ using Xunit;
namespace MyCompanyName.MyProjectName.Pages
{
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class Index_Tests : MyProjectNameWebTestBase
{
[Fact]

Loading…
Cancel
Save