diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln
index bc4b3b383f..dbc6cfe67a 100644
--- a/framework/Volo.Abp.sln
+++ b/framework/Volo.Abp.sln
@@ -447,6 +447,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Imaging.ImageSharp
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Imaging.MagickNet", "src\Volo.Abp.Imaging.MagickNet\Volo.Abp.Imaging.MagickNet.csproj", "{F701EDA5-D7EA-4AA7-9C57-83ED50CE72EC}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Imaging.Tests", "test\Volo.Abp.Imaging.Tests\Volo.Abp.Imaging.Tests.csproj", "{2BE6BDC7-A9A3-4E30-9099-A9EF4813F6FF}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1333,6 +1335,10 @@ Global
{F701EDA5-D7EA-4AA7-9C57-83ED50CE72EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F701EDA5-D7EA-4AA7-9C57-83ED50CE72EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F701EDA5-D7EA-4AA7-9C57-83ED50CE72EC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2BE6BDC7-A9A3-4E30-9099-A9EF4813F6FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2BE6BDC7-A9A3-4E30-9099-A9EF4813F6FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2BE6BDC7-A9A3-4E30-9099-A9EF4813F6FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2BE6BDC7-A9A3-4E30-9099-A9EF4813F6FF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1558,6 +1564,7 @@ Global
{44467427-E0BE-492C-B9B4-82B362C183C3} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{F701EDA5-D7EA-4AA7-9C57-83ED50CE72EC} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{78340A37-219E-4F2D-9AC6-40A7B467EEEC} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
+ {2BE6BDC7-A9A3-4E30-9099-A9EF4813F6FF} = {447C8A77-E5F0-4538-8687-7383196D04EA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo.Abp.Imaging.Abstractions.Tests.abppkg.json b/framework/test/Volo.Abp.Imaging.Tests/Volo.Abp.Imaging.Abstractions.Tests.abppkg.json
new file mode 100644
index 0000000000..a686451fbc
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo.Abp.Imaging.Abstractions.Tests.abppkg.json
@@ -0,0 +1,3 @@
+{
+ "role": "lib.test"
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo.Abp.Imaging.Tests.csproj b/framework/test/Volo.Abp.Imaging.Tests/Volo.Abp.Imaging.Tests.csproj
new file mode 100644
index 0000000000..4b84199ec8
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo.Abp.Imaging.Tests.csproj
@@ -0,0 +1,22 @@
+
+
+
+
+
+ net7.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingAbstractionsTestBase.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingAbstractionsTestBase.cs
new file mode 100644
index 0000000000..6ba84ac482
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingAbstractionsTestBase.cs
@@ -0,0 +1,105 @@
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Testing;
+using Xunit;
+
+namespace Volo.Abp.Imaging;
+
+public abstract class AbpImagingAbstractionsTestBase : AbpIntegratedTest
+{
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
+
+public class IIImageResizer_Tests : AbpImagingAbstractionsTestBase
+{
+ protected IImageResizer ImageResizer { get; }
+
+ public IIImageResizer_Tests()
+ {
+ ImageResizer = GetRequiredService();
+ }
+ [Fact]
+ public async Task Should_Resize_Jpg()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(jpegImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Unsupported);
+
+ resizedImage.Result.ShouldBe(jpegImage);
+ }
+
+ [Fact]
+ public async Task Should_Resize_Png()
+ {
+ await using var pngImage = ImageFileHelper.GetPngTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(pngImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Unsupported);
+
+ resizedImage.Result.ShouldBe(pngImage);
+ }
+
+ [Fact]
+ public async Task Should_Resize_Webp()
+ {
+ await using var webpImage = ImageFileHelper.GetWebpTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(webpImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Unsupported);
+
+ resizedImage.Result.ShouldBe(webpImage);
+ }
+}
+
+public class IIImageCompressor_Tests : AbpImagingAbstractionsTestBase
+{
+ protected IImageCompressor ImageCompressor { get; }
+
+ public IIImageCompressor_Tests()
+ {
+ ImageCompressor = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task Should_Compress_Jpg()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(jpegImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Unsupported);
+
+ compressedImage.Result.ShouldBe(jpegImage);
+ }
+
+ [Fact]
+ public async Task Should_Compress_Png()
+ {
+ await using var pngImage = ImageFileHelper.GetPngTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(pngImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Unsupported);
+
+ compressedImage.Result.ShouldBe(pngImage);
+ }
+
+ [Fact]
+ public async Task Should_Compress_Webp()
+ {
+ await using var webpImage = ImageFileHelper.GetWebpTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(webpImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Unsupported);
+
+ compressedImage.Result.ShouldBe(webpImage);
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingAbstractionsTestModule.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingAbstractionsTestModule.cs
new file mode 100644
index 0000000000..5d9bb12c49
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingAbstractionsTestModule.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Autofac;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Imaging;
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpImagingAbstractionsModule),
+ typeof(AbpTestBaseModule)
+)]
+public class AbpImagingAbstractionsTestModule : AbpModule
+{
+
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpProviderTestBase.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpProviderTestBase.cs
new file mode 100644
index 0000000000..14f0857d38
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpProviderTestBase.cs
@@ -0,0 +1,139 @@
+using System.IO;
+using System.Threading.Tasks;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Imaging;
+
+public abstract class AbpImagingImageSharpProviderTestBase : AbpImagingImageSharpTestBase
+{
+ protected IImageCompressor ImageCompressor { get; }
+ protected IImageResizer ImageResizer { get; }
+
+ public AbpImagingImageSharpProviderTestBase()
+ {
+ ImageCompressor = GetRequiredService();
+ ImageResizer = GetRequiredService();
+ }
+}
+
+public class ImageSharpImageCompressor_Tests : AbpImagingImageSharpProviderTestBase
+{
+ [Fact]
+ public async Task Should_Compress_Jpg()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(jpegImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Done);
+ compressedImage.Result.Length.ShouldBeLessThan(jpegImage.Length);
+ compressedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Compress_Png()
+ {
+ await using var pngImage = ImageFileHelper.GetPngTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(pngImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Done);
+ compressedImage.Result.Length.ShouldBeLessThan(pngImage.Length);
+ compressedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Compress_Webp()
+ {
+ await using var webpImage = ImageFileHelper.GetWebpTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(webpImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Done);
+ compressedImage.Result.Length.ShouldBeLessThan(webpImage.Length);
+ compressedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Compress_Stream_And_Byte_Array_The_Same()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var byteArr = await jpegImage.GetAllBytesAsync();
+
+ var compressedImage1 = await ImageCompressor.CompressAsync(jpegImage);
+ var compressedImage2 = await ImageCompressor.CompressAsync(byteArr);
+
+ compressedImage1.ShouldNotBeNull();
+ compressedImage1.State.ShouldBe(ProcessState.Done);
+
+ compressedImage2.ShouldNotBeNull();
+ compressedImage2.State.ShouldBe(ProcessState.Done);
+
+ compressedImage1.Result.Length.ShouldBeLessThan(jpegImage.Length);
+ compressedImage2.Result.LongLength.ShouldBeLessThan(jpegImage.Length);
+
+ compressedImage1.Result.Length.ShouldBe(compressedImage2.Result.LongLength);
+
+ compressedImage1.Result.Dispose();
+ }
+}
+
+public class ImageSharpImageResizer_Tests : AbpImagingImageSharpProviderTestBase
+{
+ [Fact]
+ public async Task Should_Resize_Jpg()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(jpegImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Done);
+ resizedImage.Result.Length.ShouldBeLessThan(jpegImage.Length);
+ }
+
+ [Fact]
+ public async Task Should_Resize_Png()
+ {
+ await using var pngImage = ImageFileHelper.GetPngTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(pngImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Done);
+ resizedImage.Result.Length.ShouldBeLessThan(pngImage.Length);
+ }
+
+ [Fact]
+ public async Task Should_Resize_Webp()
+ {
+ await using var webpImage = ImageFileHelper.GetWebpTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(webpImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Done);
+ resizedImage.Result.Length.ShouldBeLessThan(webpImage.Length);
+ }
+
+ [Fact]
+ public async Task Should_Resize_Stream_And_Byte_Array_The_Same()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var byteArr = await jpegImage.GetAllBytesAsync();
+
+ var resizedImage1 = await ImageResizer.ResizeAsync(jpegImage, new ImageResizeArgs(100, 100));
+ var resizedImage2 = await ImageResizer.ResizeAsync(byteArr, new ImageResizeArgs(100, 100));
+
+ resizedImage1.ShouldNotBeNull();
+ resizedImage1.State.ShouldBe(ProcessState.Done);
+
+ resizedImage2.ShouldNotBeNull();
+ resizedImage2.State.ShouldBe(ProcessState.Done);
+
+ resizedImage1.Result.Length.ShouldBeLessThan(jpegImage.Length);
+ resizedImage2.Result.LongLength.ShouldBeLessThan(jpegImage.Length);
+
+ resizedImage1.Result.Length.ShouldBe(resizedImage2.Result.LongLength);
+
+ resizedImage1.Result.Dispose();
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpTestBase.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpTestBase.cs
new file mode 100644
index 0000000000..0921c2f770
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpTestBase.cs
@@ -0,0 +1,11 @@
+using Volo.Abp.Testing;
+
+namespace Volo.Abp.Imaging;
+
+public abstract class AbpImagingImageSharpTestBase : AbpIntegratedTest
+{
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpTestModule.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpTestModule.cs
new file mode 100644
index 0000000000..fe8cc8c8ae
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingImageSharpTestModule.cs
@@ -0,0 +1,15 @@
+using Volo.Abp.Autofac;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Imaging;
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpImagingImageSharpModule),
+ typeof(AbpTestBaseModule)
+)]
+
+public class AbpImagingImageSharpTestModule : AbpModule
+{
+
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetProviderTestBase.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetProviderTestBase.cs
new file mode 100644
index 0000000000..b28ee86fff
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetProviderTestBase.cs
@@ -0,0 +1,141 @@
+using System.IO;
+using System.Threading.Tasks;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Imaging;
+
+public abstract class AbpImagingMagickNetProviderTestBase : AbpImagingMagickNetTestBase
+{
+ protected IImageCompressor ImageCompressor { get; }
+ protected IImageResizer ImageResizer { get; }
+
+ public AbpImagingMagickNetProviderTestBase()
+ {
+ ImageCompressor = GetRequiredService();
+ ImageResizer = GetRequiredService();
+ }
+}
+
+
+public class MagickNetImageCompressor_Tests : AbpImagingMagickNetProviderTestBase
+{
+ [Fact]
+ public async Task Should_Compress_Jpg()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(jpegImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Done);
+ compressedImage.Result.Length.ShouldBeLessThan(jpegImage.Length);
+
+ compressedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Compress_Png()
+ {
+ await using var pngImage = ImageFileHelper.GetPngTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(pngImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Done);
+ compressedImage.Result.Length.ShouldBeLessThan(pngImage.Length);
+
+ compressedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Compress_Webp()
+ {
+ await using var webpImage = ImageFileHelper.GetWebpTestFileStream();
+ var compressedImage = await ImageCompressor.CompressAsync(webpImage);
+
+ compressedImage.ShouldNotBeNull();
+ compressedImage.State.ShouldBe(ProcessState.Unsupported);
+ compressedImage.Result.ShouldBe(webpImage);
+ }
+
+ [Fact]
+ public async Task Should_Compress_Stream_And_Byte_Array_The_Same()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var compressedImage1 = await ImageCompressor.CompressAsync(jpegImage);
+ var compressedImage2 = await ImageCompressor.CompressAsync(await jpegImage.GetAllBytesAsync());
+
+ compressedImage1.ShouldNotBeNull();
+ compressedImage1.State.ShouldBe(ProcessState.Done);
+ compressedImage1.Result.Length.ShouldBeLessThan(jpegImage.Length);
+
+ compressedImage2.ShouldNotBeNull();
+ compressedImage2.State.ShouldBe(ProcessState.Done);
+ compressedImage2.Result.LongLength.ShouldBeLessThan(jpegImage.Length);
+
+ compressedImage1.Result.Length.ShouldBe(compressedImage2.Result.LongLength);
+
+ compressedImage1.Result.Dispose();
+ }
+}
+
+public class MagickNetImageResizer_Tests : AbpImagingMagickNetProviderTestBase
+{
+ [Fact]
+ public async Task Should_Resize_Jpg()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(jpegImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Done);
+ resizedImage.Result.Length.ShouldBeLessThan(jpegImage.Length);
+
+ resizedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Resize_Png()
+ {
+ await using var pngImage = ImageFileHelper.GetPngTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(pngImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Done);
+ resizedImage.Result.Length.ShouldBeLessThan(pngImage.Length);
+
+ resizedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Resize_Webp()
+ {
+ await using var webpImage = ImageFileHelper.GetWebpTestFileStream();
+ var resizedImage = await ImageResizer.ResizeAsync(webpImage, new ImageResizeArgs(100, 100));
+
+ resizedImage.ShouldNotBeNull();
+ resizedImage.State.ShouldBe(ProcessState.Done);
+ resizedImage.Result.Length.ShouldBeLessThan(webpImage.Length);
+
+ resizedImage.Result.Dispose();
+ }
+
+ [Fact]
+ public async Task Should_Resize_Stream_And_Byte_Array_The_Same()
+ {
+ await using var jpegImage = ImageFileHelper.GetJpgTestFileStream();
+ var resizedImage1 = await ImageResizer.ResizeAsync(jpegImage, new ImageResizeArgs(100, 100));
+ var resizedImage2 = await ImageResizer.ResizeAsync(await jpegImage.GetAllBytesAsync(), new ImageResizeArgs(100, 100));
+
+ resizedImage1.ShouldNotBeNull();
+ resizedImage1.State.ShouldBe(ProcessState.Done);
+ resizedImage1.Result.Length.ShouldBeLessThan(jpegImage.Length);
+
+ resizedImage2.ShouldNotBeNull();
+ resizedImage2.State.ShouldBe(ProcessState.Done);
+ resizedImage2.Result.LongLength.ShouldBeLessThan(jpegImage.Length);
+
+ resizedImage1.Result.Length.ShouldBe(resizedImage2.Result.LongLength);
+
+ resizedImage1.Result.Dispose();
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetTestBase.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetTestBase.cs
new file mode 100644
index 0000000000..6fae4cd4e3
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetTestBase.cs
@@ -0,0 +1,11 @@
+using Volo.Abp.Testing;
+
+namespace Volo.Abp.Imaging;
+
+public abstract class AbpImagingMagickNetTestBase : AbpIntegratedTest
+{
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetTestModule.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetTestModule.cs
new file mode 100644
index 0000000000..31d76dce6f
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/AbpImagingMagickNetTestModule.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Autofac;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Imaging;
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpImagingMagickNetModule),
+ typeof(AbpTestBaseModule)
+)]
+public class AbpImagingMagickNetTestModule : AbpModule
+{
+
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.jpg b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.jpg
new file mode 100644
index 0000000000..16415cc706
Binary files /dev/null and b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.jpg differ
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.png b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.png
new file mode 100644
index 0000000000..ae70d5cbc8
Binary files /dev/null and b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.png differ
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.webp b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.webp
new file mode 100644
index 0000000000..377861d583
Binary files /dev/null and b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/Files/abp.webp differ
diff --git a/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/ImageFileHelper.cs b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/ImageFileHelper.cs
new file mode 100644
index 0000000000..de249fb2e5
--- /dev/null
+++ b/framework/test/Volo.Abp.Imaging.Tests/Volo/Abp/Imaging/ImageFileHelper.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+
+namespace Volo.Abp.Imaging;
+
+public static class ImageFileHelper
+{
+ public static Stream GetJpgTestFileStream()
+ {
+ return GetTestFileStream("abp.jpg");
+ }
+
+ public static Stream GetPngTestFileStream()
+ {
+ return GetTestFileStream("abp.png");
+ }
+
+ public static Stream GetWebpTestFileStream()
+ {
+ return GetTestFileStream("abp.webp");
+ }
+
+ private static Stream GetTestFileStream(string fileName)
+ {
+ var assembly = typeof(ImageFileHelper).Assembly;
+ var resourceStream = assembly.GetManifestResourceStream("Volo.Abp.Imaging.Files." + fileName);
+ if (resourceStream == null)
+ {
+ throw new Exception($"File {fileName} does not exists!");
+ }
+
+ return resourceStream;
+ }
+}
\ No newline at end of file