接受其他私有静态方法作为委托参数的私有静态方法的 C# 单元测试

Unit testing in C# of private-static method accepting other private-static method as a delegate parameter

我有什么:我有一个非静态的class,其中包含两个私有静态方法:其中一个可以传递给另一个作为委托参数:

public class MyClass
{
    ...

    private static string MyMethodToTest(int a, int b, Func<int, int, int> myDelegate)
    {
        return "result is " + myDelegate(a, b);
    }

    private static int MyDelegateMethod(int a, int b)
    {
        return (a + b);
    }
}

我必须做的事情: 我必须测试(通过单元测试)私有静态方法 MyMethodToTest 并将私有的委托参数传递给它-静态方法MyDelegateMethod.

我能做什么:我知道如何测试私有静态方法,但我不知道如何将另一个私有静态方法传递给该方法class 作为委托参数。

因此,如果我们假设 MyMethodToTest 方法根本没有第三个参数,则测试方法将如下所示:

using System;
using System.Reflection;
using Microsoft.VisualStudio.TestTools.UnitTesting;

...

[TestMethod]
public void MyTest()
{
    PrivateType privateType = new PrivateType(typeof(MyClass));

    Type[] parameterTypes =
    {
        typeof(int),
        typeof(int)
    };

    object[] parameterValues =
    {
        33,
        22
    };

    string result = (string)privateType.InvokeStatic("MyMethodToTest", parameterTypes, parameterValues);

    Assert.IsTrue(result == "result is 55");
}

我的问题:如何测试一个私有静态方法作为委托参数传递给它的另一个私有静态方法相同class?

这是应该如何进行

[TestMethod]
public void MyTest()
{
    PrivateType privateType = new PrivateType(typeof(MyClass));

    var myPrivateDelegateMethod = typeof(MyClass).GetMethod("MyDelegateMethod", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
    var dele = myPrivateDelegateMethod.CreateDelegate(typeof(Func<int, int, int>));
    object[] parameterValues =
    {
        33,22,dele
    };
    string result = (string)privateType.InvokeStatic("MyMethodToTest", parameterValues);
    Assert.IsTrue(result == "result is 55");
}