gpt4 book ai didi

c# - 如果您无法控制类,如何模拟类中的方法?

转载 作者:行者123 更新时间:2023-12-04 01:07:47 25 4
gpt4 key购买 nike

我正在使用 Xunit 和 Moq 进行单元测试。到目前为止,我能够成功地从接口(interface)模拟和测试方法。
但是我应该如何模拟和测试我无法控制的类的方法。该类没有接口(interface),方法不是虚拟的。
我研究了 Type Mock Isolator,但我无法做到这一点,而且这不是一个可行的解决方案,因为它是付费的,只有 14 天的试用期,我需要长期这样做。
我有哪些选择?

最佳答案

为依赖项创建一个包装器。您无需测试您未编写的代码的实现。用预期或假设的输出模拟依赖包装器。

public sealed class SomeBadDependency
{
public int CalculateSuperSecretValue(int inputX, int inputY)
{
return Math.Max(inputX, inputY);
}
}

public interface IDependencyWrapper
{
int CalculateSuperSecretValue(int inputX, int inputY);
}

public sealed class DependencyWrapper : IDependencyWrapper
{
private readonly SomeBadDependency _someBadDependency;

public DependencyWrapper(SomeBadDependency someBadDependency)
{
_someBadDependency = someBadDependency;
}

public int CalculateSuperSecretValue(int inputX, int inputY)
{
return _someBadDependency.CalculateSuperSecretValue(inputX, inputY);
}
}

public sealed class YourCode
{
private readonly IDependencyWrapper _dependencyWrapper;

public YourCode(IDependencyWrapper dependencyWrapper)
{
_dependencyWrapper = dependencyWrapper;
}

public decimal CalculateYourValue(decimal inputX, decimal inputY)
{
return _dependencyWrapper.CalculateSuperSecretValue((int) inputX, (int) inputY);
}
}

关于c# - 如果您无法控制类,如何模拟类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65832779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com