您永远不应该在另一个 class 方法中创建任何其他 class 的新对象吗?

Should you NEVER create a new object of any other class in another class' method?

我一直在努力理解依赖注入和 Ioc 以及所有与之相关的概念,但没有取得太大进展。

我所理解的是使我的 class(比如 A)可测试(我的 class 使用 class B 的对象),我应该将对象注入我的class' 构造函数是这样的:

class A{

    B class_B_Object;

    A(B class_B_Object){
        this.class_B_Object = class_B_Object;
    }
}

所以,我的问题是,可以肯定地说我的 class A 的任何方法中都不应该有类似 var classBObject = new B() 的东西吗?

never 是一个很强的词,你应该非常小心地使用它。根据 AB 是什么,A 创建(通常是 return)B 的实例可能是完全正常的。这里可测试性的要点是,如果 A 使用 B 的一个实例并依赖于它的逻辑,你应该有一个简单的方法来注入模拟B 的实例,其中此逻辑受到控制(即 - 模拟),因此当您为 A 编写单元测试时,您只是在测试其逻辑,而不是 B 的底层逻辑.

使您的代码易于单独进行单元测试的第一步是在层之间使用弱耦合。这意味着你的 A class 构造函数不应该采用 B class 而是 IB 一些潜在的 B class 可能的接口实行。这将允许您在单元测试中用您可以控制的东西替换此接口 - 一个模拟,因为您正在测试 A class,而不是 B.

关于你的var classBObject = new B()问题,具体要视情况而定,但一般情况下,最好从外部提供这个实例。