Browse Source

Refactor and comment for tests.

pull/1156/head
Halil ibrahim Kalkan 7 years ago
parent
commit
4f72a05233
  1. 3
      templates/mvc-module/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs
  2. 4
      templates/mvc-module/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj
  3. 3
      templates/mvc-module/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs
  4. 4
      templates/mvc-module/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs
  5. 3
      templates/mvc-module/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestBase.cs
  6. 5
      templates/mvc-module/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs
  7. 10
      templates/mvc-module/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj
  8. 3
      templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestBase.cs
  9. 2
      templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs
  10. 5
      templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs
  11. 8
      templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj
  12. 14
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj
  13. 27
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameDataSeedContributor.cs
  14. 87
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBase.cs
  15. 15
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs
  16. 8
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestData.cs
  17. 24
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataBuilder.cs
  18. 4
      templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/Samples/SampleRepository_Tests.cs
  19. 0
      templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataSeedContributor.cs

3
templates/mvc-module/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs

@ -1,5 +1,8 @@
namespace MyCompanyName.MyProjectName
{
/* Inherit from this class for your application layer tests.
* See SampleAppService_Tests for example.
*/
public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase<MyProjectNameApplicationTestModule>
{

4
templates/mvc-module/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj

@ -8,11 +8,11 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<ProjectReference Include="..\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj" />
</ItemGroup>
</Project>

3
templates/mvc-module/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs

@ -1,5 +1,8 @@
namespace MyCompanyName.MyProjectName
{
/* Inherit from this class for your domain layer tests.
* See SampleManager_Tests for example.
*/
public abstract class MyProjectNameDomainTestBase : MyProjectNameTestBase<MyProjectNameDomainTestModule>
{

4
templates/mvc-module/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs

@ -3,6 +3,10 @@ using Volo.Abp.Modularity;
namespace MyCompanyName.MyProjectName
{
/* Domain tests are configured to use the EF Core provider.
* You can switch to MongoDB, however your domain tests should be
* database independent anyway.
*/
[DependsOn(
typeof(MyProjectNameEntityFrameworkCoreTestModule)
)]

3
templates/mvc-module/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestBase.cs

@ -1,5 +1,8 @@
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
/* This class can be used as a base class for EF Core integration tests,
* while SampleRepository_Tests uses a different approach.
*/
public abstract class MyProjectNameEntityFrameworkCoreTestBase : MyProjectNameTestBase<MyProjectNameEntityFrameworkCoreTestModule>
{

5
templates/mvc-module/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs

@ -4,6 +4,9 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Samples
{
public class SampleRepository_Tests : SampleRepository_Tests<MyProjectNameEntityFrameworkCoreTestModule>
{
/* Don't write custom repository tests here, instead write to
* the base class.
* One exception can be some specific tests related to EF core.
*/
}
}

10
templates/mvc-module/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj

@ -7,11 +7,6 @@
<RootNamespace>MyCompanyName.MyProjectName</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="2.2.0" />
@ -19,4 +14,9 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="2.2.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj" />
</ItemGroup>
</Project>

3
templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestBase.cs

@ -1,5 +1,8 @@
namespace MyCompanyName.MyProjectName.MongoDB
{
/* This class can be used as a base class for MongoDB integration tests,
* while SampleRepository_Tests uses a different approach.
*/
public abstract class MyProjectNameMongoDbTestBase : MyProjectNameTestBase<MyProjectNameMongoDbTestModule>
{

2
templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs

@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.MongoDB
Configure<DbConnectionOptions>(options =>
{
options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString;
options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString + "|MyProjectName";
});
}

5
templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs

@ -4,6 +4,9 @@ namespace MyCompanyName.MyProjectName.MongoDB.Samples
{
public class SampleRepository_Tests : SampleRepository_Tests<MyProjectNameMongoDbTestModule>
{
/* Don't write custom repository tests here, instead write to
* the base class.
* One exception can be some specific tests related to MongoDB.
*/
}
}

8
templates/mvc-module/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj

@ -8,13 +8,13 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.MongoDB\MyCompanyName.MyProjectName.MongoDB.csproj" />
<ProjectReference Include="..\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Mongo2Go" Version="2.2.8" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Mongo2Go" Version="2.2.8" />
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.MongoDB\MyCompanyName.MyProjectName.MongoDB.csproj" />
<ProjectReference Include="..\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj" />
</ItemGroup>
</Project>

14
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj

@ -7,13 +7,6 @@
<RootNamespace>MyCompanyName.MyProjectName</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.TestBase\Volo.Abp.TestBase.csproj" />
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="NSubstitute" Version="3.1.0" />
@ -21,6 +14,13 @@
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.TestBase\Volo.Abp.TestBase.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj" />
</ItemGroup>
</Project>

27
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameDataSeedContributor.cs

@ -0,0 +1,27 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
namespace MyCompanyName.MyProjectName
{
public class MyProjectNameDataSeedContributor : IDataSeedContributor, ITransientDependency
{
private readonly IGuidGenerator _guidGenerator;
public MyProjectNameDataSeedContributor(
IGuidGenerator guidGenerator)
{
_guidGenerator = guidGenerator;
}
public Task SeedAsync(DataSeedContext context)
{
/* Instead of returning the Task.CompletedTask, you can insert your test data
* at this point!
*/
return Task.CompletedTask;
}
}
}

87
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBase.cs

@ -1,8 +1,13 @@
using Volo.Abp;
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
namespace MyCompanyName.MyProjectName
{
/* All test classes are derived from this class, directly or indirectly. */
public abstract class MyProjectNameTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule>
where TStartupModule : IAbpModule
{
@ -10,5 +15,85 @@ namespace MyCompanyName.MyProjectName
{
options.UseAutofac();
}
protected virtual void WithUnitOfWork(Action action)
{
WithUnitOfWork(new UnitOfWorkOptions(), action);
}
protected virtual void WithUnitOfWork(UnitOfWorkOptions options, Action action)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
action();
uow.Complete();
}
}
}
protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
{
return WithUnitOfWorkAsync(new UnitOfWorkOptions(), func);
}
protected virtual async Task WithUnitOfWorkAsync(UnitOfWorkOptions options, Func<Task> action)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
await action();
await uow.CompleteAsync();
}
}
}
protected virtual TResult WithUnitOfWork<TResult>(Func<TResult> func)
{
return WithUnitOfWork(new UnitOfWorkOptions(), func);
}
protected virtual TResult WithUnitOfWork<TResult>(UnitOfWorkOptions options, Func<TResult> func)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
var result = func();
uow.Complete();
return result;
}
}
}
protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
{
return WithUnitOfWorkAsync(new UnitOfWorkOptions(), func);
}
protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(UnitOfWorkOptions options, Func<Task<TResult>> func)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
var result = await func();
await uow.CompleteAsync();
return result;
}
}
}
}
}

15
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs

@ -2,7 +2,9 @@
using Volo.Abp;
using Volo.Abp.Authorization;
using Volo.Abp.Autofac;
using Volo.Abp.Data;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace MyCompanyName.MyProjectName
{
@ -26,12 +28,15 @@ namespace MyCompanyName.MyProjectName
private static void SeedTestData(ApplicationInitializationContext context)
{
using (var scope = context.ServiceProvider.CreateScope())
AsyncHelper.RunSync(async () =>
{
scope.ServiceProvider
.GetRequiredService<MyProjectNameTestDataBuilder>()
.Build();
}
using (var scope = context.ServiceProvider.CreateScope())
{
await scope.ServiceProvider
.GetRequiredService<IDataSeeder>()
.SeedAsync();
}
});
}
}
}

8
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestData.cs

@ -1,8 +0,0 @@
using Volo.Abp.DependencyInjection;
namespace MyCompanyName.MyProjectName
{
public class MyProjectNameTestData : ISingletonDependency
{
}
}

24
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataBuilder.cs

@ -1,24 +0,0 @@
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
namespace MyCompanyName.MyProjectName
{
public class MyProjectNameTestDataBuilder : ITransientDependency
{
private readonly IGuidGenerator _guidGenerator;
private MyProjectNameTestData _testData;
public MyProjectNameTestDataBuilder(
IGuidGenerator guidGenerator,
MyProjectNameTestData testData)
{
_guidGenerator = guidGenerator;
_testData = testData;
}
public void Build()
{
}
}
}

4
templates/mvc-module/test/MyCompanyName.MyProjectName.TestBase/Samples/SampleRepository_Tests.cs

@ -4,6 +4,10 @@ using Xunit;
namespace MyCompanyName.MyProjectName.Samples
{
/* Write your custom repository tests like that, in this project, as abstract classes.
* Then inherit these abstract classes from EF Core & MongoDB test projects.
* In this way, both database providers are tests with the same set tests.
*/
public abstract class SampleRepository_Tests<TStartupModule> : MyProjectNameTestBase<TStartupModule>
where TStartupModule : IAbpModule
{

0
templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataBuilder.cs → templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataSeedContributor.cs

Loading…
Cancel
Save