diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs
index cdf5fcb08..5aed3b364 100644
--- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs
@@ -31,21 +31,9 @@ namespace SixLabors.ImageSharp.Tests
protected override object[] GetFactoryMethodArgs(MethodInfo testMethod, Type factoryType)
{
- MethodInfo m = testMethod.DeclaringType.GetMethod(this.memberMethodName);
-
- Type[] args = factoryType.GetGenericArguments();
- Type colorType = args.Single();
-
- Type imgType = typeof(Image<>).MakeGenericType(colorType);
-
- Type funcType = typeof(Func<>).MakeGenericType(imgType);
-
- MethodInfo genericMethod = m.MakeGenericMethod(args);
-
- Delegate d = genericMethod.CreateDelegate(funcType);
- return new object[] { d };
+ return new object[] { testMethod.DeclaringType.FullName, this.memberMethodName};
}
protected override string GetFactoryMethodName(MethodInfo testMethod) => "Lambda";
}
-}
\ No newline at end of file
+}
diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/LambdaProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/LambdaProvider.cs
deleted file mode 100644
index b39c4f676..000000000
--- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/LambdaProvider.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System;
-
-using SixLabors.ImageSharp.PixelFormats;
-
-namespace SixLabors.ImageSharp.Tests
-{
- ///
- /// Provides instances for parametric unit tests.
- ///
- /// The pixel format of the image
- public abstract partial class TestImageProvider
- where TPixel : struct, IPixel
- {
- private class LambdaProvider : TestImageProvider
- {
- private readonly Func> factoryFunc;
-
- public LambdaProvider()
- {
- throw new NotSupportedException();
- }
-
- public LambdaProvider(Func> factoryFunc)
- {
- this.factoryFunc = factoryFunc;
- }
-
- public override Image GetImage() => this.factoryFunc();
- }
- }
-}
diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs
new file mode 100644
index 000000000..077dc622f
--- /dev/null
+++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs
@@ -0,0 +1,69 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System;
+using System.Linq;
+using System.Reflection;
+using SixLabors.ImageSharp.PixelFormats;
+using Xunit.Abstractions;
+
+namespace SixLabors.ImageSharp.Tests
+{
+ ///
+ /// Provides instances for parametric unit tests.
+ ///
+ /// The pixel format of the image
+ public abstract partial class TestImageProvider
+ where TPixel : struct, IPixel
+ {
+ private class MemberMethodProvider : TestImageProvider
+ {
+ private string declaringTypeName;
+ private string methodName;
+ private Func> factoryFunc;
+
+ public MemberMethodProvider()
+ {
+ }
+
+ public MemberMethodProvider(string declaringTypeName, string methodName)
+ {
+ this.declaringTypeName = declaringTypeName;
+ this.methodName = methodName;
+ }
+
+ public override Image GetImage()
+ {
+ this.factoryFunc ??= this.GetFactory();
+ return this.factoryFunc();
+ }
+
+ public override void Serialize(IXunitSerializationInfo info)
+ {
+ base.Serialize(info);
+
+ info.AddValue(nameof(this.declaringTypeName), this.declaringTypeName);
+ info.AddValue(nameof(this.methodName), this.methodName);
+ }
+
+ public override void Deserialize(IXunitSerializationInfo info)
+ {
+ base.Deserialize(info);
+
+ this.methodName = info.GetValue(nameof(this.methodName));
+ this.declaringTypeName = info.GetValue(nameof(this.declaringTypeName));
+ }
+
+ private Func> GetFactory()
+ {
+ var declaringType = Type.GetType(this.declaringTypeName);
+ MethodInfo m = declaringType.GetMethod(this.methodName);
+ Type pixelType = typeof(TPixel);
+ Type imgType = typeof(Image<>).MakeGenericType(pixelType);
+ Type funcType = typeof(Func<>).MakeGenericType(imgType);
+ MethodInfo genericMethod = m.MakeGenericMethod(pixelType);
+ return (Func>) genericMethod.CreateDelegate(funcType);
+ }
+ }
+ }
+}
diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs
index 6443050d3..8b165a8be 100644
--- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs
@@ -73,10 +73,11 @@ namespace SixLabors.ImageSharp.Tests
}
public static TestImageProvider Lambda(
- Func> factoryFunc,
+ string declaringTypeName,
+ string methodName,
MethodInfo testMethod = null,
PixelTypes pixelTypeOverride = PixelTypes.Undefined)
- => new LambdaProvider(factoryFunc).Init(testMethod, pixelTypeOverride);
+ => new MemberMethodProvider(declaringTypeName, methodName).Init(testMethod, pixelTypeOverride);
public static TestImageProvider Solid(
int width,