Browse Source

Fix mongo unit tests.

pull/23609/head
maliming 5 months ago
parent
commit
d023afaf3c
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 7
      framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpIntegratedTest.cs
  2. 41
      framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs
  3. 35
      framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/UnitTestSerializerHelper.cs

7
framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpIntegratedTest.cs

@ -29,6 +29,8 @@ public abstract class AbpIntegratedTest<TStartupModule> : AbpTestBaseWithService
application.Initialize(TestServiceScope.ServiceProvider);
ServiceProvider = Application.ServiceProvider;
AfterInitialize();
}
protected virtual IServiceCollection CreateServiceCollection()
@ -56,6 +58,11 @@ public abstract class AbpIntegratedTest<TStartupModule> : AbpTestBaseWithService
return services.BuildServiceProviderFromFactory();
}
protected virtual void AfterInitialize()
{
}
public virtual void Dispose()
{
Application.Shutdown();

41
framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs

@ -1,9 +1,6 @@
using System;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
using Shouldly;
using Volo.Abp.TestApp.Domain;
using Volo.Abp.TestApp.Testing;
@ -12,41 +9,16 @@ using Xunit;
namespace Volo.Abp.MongoDB.Serializer;
[Collection(MongoTestCollection.Name)]
public abstract class MongoDB_DateTimeKind_Tests : DateTimeKind_Tests<AbpMongoDbTestModule>
{
protected override void AfterAddApplication(IServiceCollection services)
protected override void AfterInitialize()
{
// MongoDB uses static properties to store the mapping information,
// We must reconfigure it in the new unit test.
foreach (var registeredClassMap in BsonClassMap.GetRegisteredClassMaps())
{
foreach (var declaredMemberMap in registeredClassMap.DeclaredMemberMaps)
{
var serializer = declaredMemberMap.GetSerializer();
switch (serializer)
{
case AbpMongoDbDateTimeSerializer dateTimeSerializer:
dateTimeSerializer.SetDateTimeKind(Kind);
break;
case NullableSerializer<DateTime> nullableSerializer:
{
var lazySerializer = nullableSerializer.GetType()
?.GetField("_lazySerializer", BindingFlags.NonPublic | BindingFlags.Instance)
?.GetValue(serializer)?.As<Lazy<IBsonSerializer<DateTime>>>();
if (lazySerializer?.Value is AbpMongoDbDateTimeSerializer dateTimeSerializer)
{
dateTimeSerializer.SetDateTimeKind(Kind);
}
break;
}
}
}
}
UnitTestSerializerHelper.FixSerializers(Kind);
}
}
[Collection(MongoTestCollection.Name)]
public class DateTimeKindTests_Unspecified : MongoDB_DateTimeKind_Tests
{
protected override void AfterAddApplication(IServiceCollection services)
@ -89,6 +61,11 @@ public class DisableDateTimeKindTests : TestAppTestBase<AbpMongoDbTestModule>
PersonRepository = GetRequiredService<IPersonRepository>();
}
protected override void AfterInitialize()
{
UnitTestSerializerHelper.FixSerializers(null);
}
protected override void AfterAddApplication(IServiceCollection services)
{
services.Configure<AbpMongoDbOptions>(x => x.UseAbpClockHandleDateTime = false);

35
framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/UnitTestSerializerHelper.cs

@ -0,0 +1,35 @@
using System;
using System.Linq;
using System.Reflection;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
using Volo.Abp.Timing;
namespace Volo.Abp.MongoDB.Serializer;
// MongoDB uses static properties to store the mapping information,
// We must reconfigure it in the new unit test.
public static class UnitTestSerializerHelper
{
public static void FixSerializers(DateTimeKind? kind)
{
foreach (var registeredClassMap in BsonClassMap.GetRegisteredClassMaps())
{
foreach (var declaredMemberMap in registeredClassMap.DeclaredMemberMaps.Where(x => x.MemberType == typeof(DateTime) || x.MemberType == typeof(DateTime?)))
{
IBsonSerializer serializer = null;
if (kind != null)
{
serializer = !declaredMemberMap.MemberInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true)
? declaredMemberMap.MemberType == typeof(DateTime?) ? new NullableSerializer<DateTime>().WithSerializer(new AbpMongoDbDateTimeSerializer(kind.Value, false))
: new AbpMongoDbDateTimeSerializer(kind.Value, false)
: declaredMemberMap.MemberType == typeof(DateTime?) ? new NullableSerializer<DateTime>().WithSerializer(new DateTimeSerializer(DateTimeKind.Unspecified))
: new DateTimeSerializer(DateTimeKind.Unspecified);
}
var fieldInfo = declaredMemberMap.GetType().GetField("_serializer", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo?.SetValue(declaredMemberMap, serializer);
}
}
}
}
Loading…
Cancel
Save