在 C# 中,我应该如何测试在单例中使用的静态方法?

问题描述 投票:0回答:1

我需要测试 MyMethodToTest 但它调用在单例内部使用的方法

public static string MyMethodToTest()
{
    int a = 4 * 9;
    string b = GetSomething()
    return b + a.ToString();
}
  
public static string GetSomething()
{
    return MySingleton.Instance.GetString();
}

我尝试使用猴子修补,但没有结果,并且使用依赖注入可能会出现问题,因为它是静态的

c# xunit.net
1个回答
0
投票

这是单例的固有问题。

有几种方法可以解决这个问题。

使单例不可变

单例是有问题的,因为它们代表全局共享状态。但如果状态永远不会改变,或者单例仅代表行为,那么大多数问题都会消失。因此,您可以使用已知的值或行为来编写测试。

使单例成为输入变量

将你的方法写为

public static string MyMethodToTest(this IMySingleton self)

这允许您用模拟替换单例以进行测试。

使用依赖注入而不是静态

依赖注入允许您将实例声明为单例对于给定的上下文或容器,而不是程序范围。这本质上更加灵活。它还应该解决您的测试问题,因为您只需替换容器中的单例即可。但如果您的程序尚未使用 DI 进行设计,则可能需要更改架构。

© www.soinside.com 2019 - 2024. All rights reserved.