簡體   English   中英

在私有靜態方法的C#中進行單元測試,接受其他私有靜態方法作為委托參數

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

我擁有:我有一個非靜態類,其中包含兩個私有靜態方法:其中一個可以作為委托參數傳遞給另一個:

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作為委托參數傳遞給它。

我能做什么:我知道如何測試私有靜態方法,但我不知道如何將同一個類的另一個私有靜態方法作為委托參數傳遞給此方法。

因此,如果我們假設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");
}

我的問題:如何測試私有靜態方法作為委托參數傳遞給它同一個類的另一個私有靜態方法?

這是它應該如何去做

[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");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM