unit-testing - 单元测试,内置生产依赖项

标签 unit-testing c#-4.0

我正在阅读单元测试的艺术”,并且有一个特定的段落我不确定。

“您可能希望避免使用基类而不是接口(interface)的原因之一是生产代码中的基类可能已经(并且可能具有)您必须了解并覆盖的内置生产依赖项. 这使得实现派生类进行测试比实现一个接口(interface)更难,这让你确切地知道底层实现是什么,并让你完全控制它。

有人可以给我一个内置生产依赖的例子吗?

谢谢

最佳答案

我对此的解释基本上是任何你无法控制底层实现但仍然依赖它的地方。这可能在您自己的代码或第三方库中。

就像是:

class MyClass : BaseConfigurationProvider
{
}

abstract class BaseConfigurationProvider
{
    string connectionString;

    protected BaseConfigurationProvider()
    {
        connectionString = GetFromConfiguration();
    }
}

这依赖于从哪里返回连接字符串,可能是配置文件,也可能是随机文本文件 - 无论哪种方式,MyClass 上的单元测试的外部状态处理都很困难.

而给定一个接口(interface)也是一样的:
class MyClass : IBaseConfigurationProvider
{ 
    string connectionString;

    public MyClass(IBaseConfigurationProvider provider)
    {
        connectionString = provider.GetConnectionString();
    }
}

interface IBaseConfigurationProvider
{
    string GetConnectionString();
}

您至少可以完全控制实现,并且使用接口(interface)意味着可以在单元测试期间使用实现的测试版本,或者您可以将依赖项注入(inject)到消费类中(就像我在上面所做的那样)。在这种情况下,依赖于解析连接字符串的需要。测试可以提供不同的字符串或空字符串。

关于unit-testing - 单元测试,内置生产依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11416443/

相关文章:

C# 排队相关任务由线程池处理

.net - Nhibernate更新问题-参数索引超出范围

c# - 这是 C# 4.0 编译器可选参数错误吗?

Python 单元测试 - 是否应该模拟其他 ClassMethods?

c# - 如何使用最小起订量测试抽象类中的具体方法?

c# - 在 Entity Framework 4.1 中查询一页数据并获取总计数的更好方法?

c# - SaveChange 不起作用后刷新数据源

java - 如何创建一个为所有类创建对象的 setUp 方法?

angular - 如何测试该组件模板包含 mat-error

c++ - 在 MOCK_METHOD 中匹配多个对象