c# - TDD/注入(inject)和信息隐藏之间的斗争 - 可能的妥协?

标签 c# unit-testing tdd

我刚刚为其他人提出了以下模式。我已经使用过它几次,当时我想要注入(inject)依赖项进行测试,但仍然希望这个后门(在某种程度上)对外人来说是不可见的。因此,空的公共(public) ctor 和内部 ctor 带有参数:

public class ClassThatUseInjection
{
    private readonly SomeClass _injectedClass;

    public ClassThatUseInjection(): this(new SomeClass()) {}

    internal ClassThatUseInjection(SomeClass injectedClass)
    {
        _injectedClass = injectedClass;
    }
}


public class SomeClass
{
    public object SomeProperty { get; set; }
}

我的想法是,由于空 ctor 除了转发一个新实例之外什么也不做,所以我的罪行并不算太严重。你怎么认为?是不是太臭了?

问候, 莫滕

最佳答案

我觉得还可以。事实上,您注入(inject)类所做的就是依赖注入(inject)和开闭原则的实际运用。
我什至认为将内部 Actor 变成公共(public) Actor 没有什么坏处。
我的问题始终是,我不想强​​迫其他人创建注入(inject)类的实例,因此是默认的 ctor。但如果他们想创建一个实例,他们可以继续这样做。

相关说明:恕我直言,您应该使用接口(interface)而不是类,否则,我认为首先传递该类没有太多优势......

关于c# - TDD/注入(inject)和信息隐藏之间的斗争 - 可能的妥协?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093182/

相关文章:

c# - 在程序运行期间获取有关 RAM 的信息

c# - C# 中从字符串中删除换行符的最简单方法是什么?

java - 测试方法传递空指针异常

sqlite - 在单元测试期间避免在 EF Core 2.2 中使用 HasData Seed DbContext

php - 测试不存在的代码

c# - 是否可以在 Page_Load 事件后调用函数?

c# - 我怎样才能在 excel epplus c# 中换行

c# - "Analyzer with Code Fix"项目模板已损坏

.net - 没有单元测试 (TDD) 的 QA 能否高效?

c# - 测试中的代码覆盖率