gpt4 book ai didi

c# - 在应用程序中使用静态引用信息最 "testable"的方式是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:18 26 4
gpt4 key购买 nike

我有一个应用程序需要引用一组引用代码(一个 3 个字符的代码及其相关的简短描述)。数据不会改变——或者至少我过去从未知道它会改变——但我仍然无法将其硬编码到应用程序代码中。

我最初的想法是创建一个静态类以在应用程序中引用并在运行时从某种配置文件加载此信息。我的问题是我不知道如何让它可测试。

我的新手单元测试问题是:

如何在不依赖配置文件的情况下将数据获取到静态引用类中?

如何使这个静态引用类可测试?

最佳答案

你可以为你的配置类创建接口(interface),而不是依赖于这个接口(interface)而不是一些具体的实现(这叫做 Dependency Inversion Principle ):

interface ISomeData
{
IEnumerable<string> YourData {get;}
}

class SomeData
{
// This class is a singleton that could read
// all apropriate data from application configuration file into SomeData
// instance and then return this instance in following property
public static ISomeData {get;}
}

class YourClass
{
private readonly ISomeData _someData;

public YourClass(ISomeData someData)
{
_someData = someData;
}

// You can even create additional parameterless constructor that will use
// your singleton
pbulic YourClass()
: this(SomeData.Instance)
{}
}

然后您可以轻松创建单元测试,因为您可以使用假实现“模拟”您的 ISomeData 接口(interface),并将该模拟对象的实例传递给 YourClass 构造函数。

// Somewhere in unit test project

class SomeDataMock : ISomeData
{
// you should implement this method manually or use some mocking framework
public IEnumerable<string> YourData { get; }
}

[TestCase]
public void SomeTest()
{
ISomeData mock = new SomeDataMock();
var yourClass = new YourClass(mock);
// test your class without any dependency on concrete implementation
}

正如我之前提到的,您可以使用一些模拟框架或使用类似 Unity 的东西来帮助实现所有这些。

关于c# - 在应用程序中使用静态引用信息最 "testable"的方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7467784/

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