我需要测试 MyMethodToTest 但它调用在单例内部使用的方法
public static string MyMethodToTest()
{
int a = 4 * 9;
string b = GetSomething()
return b + a.ToString();
}
public static string GetSomething()
{
return MySingleton.Instance.GetString();
}
我尝试使用猴子修补,但没有结果,并且使用依赖注入可能会出现问题,因为它是静态的
这是单例的固有问题。
有几种方法可以解决这个问题。
单例是有问题的,因为它们代表全局共享状态。但如果状态永远不会改变,或者单例仅代表行为,那么大多数问题都会消失。因此,您可以使用已知的值或行为来编写测试。
将你的方法写为
public static string MyMethodToTest(this IMySingleton self)
这允许您用模拟替换单例以进行测试。
依赖注入允许您将实例声明为单例对于给定的上下文或容器,而不是程序范围。这本质上更加灵活。它还应该解决您的测试问题,因为您只需替换容器中的单例即可。但如果您的程序尚未使用 DI 进行设计,则可能需要更改架构。