C# 在TDD'时提取类;惯性导航与制导。如何测试新提取的类?

C# 在TDD'时提取类;惯性导航与制导。如何测试新提取的类?,c#,java,unit-testing,tdd,C#,Java,Unit Testing,Tdd,所以我在我的主类中有几个方法,它们使用矩阵来设置像素的开或关。我运行了所有当前的测试,因此我决定现在已经是时候拿出一些与矩阵相关的逻辑,创建一个矩阵类了 我的问题是,除了我目前为我的SUT类所做的测试(我才刚刚开始,所以我目前只有一个类,SUT的主类),我应该为它创建单元测试吗?如果是,你怎么做?我的意思是,我是否应该让我所有的代码都保持现在的状态,一个接一个地创建单元测试,然后执行测试优先的方法,直到我看到我在其中拥有了我想要的所有功能,并且只有在那里我才重构了我的代码?我只是直接创建Matr

所以我在我的主类中有几个方法,它们使用矩阵来设置像素的开或关。我运行了所有当前的测试,因此我决定现在已经是时候拿出一些与矩阵相关的逻辑,创建一个矩阵类了

我的问题是,除了我目前为我的SUT类所做的测试(我才刚刚开始,所以我目前只有一个类,SUT的主类),我应该为它创建单元测试吗?如果是,你怎么做?我的意思是,我是否应该让我所有的代码都保持现在的状态,一个接一个地创建单元测试,然后执行测试优先的方法,直到我看到我在其中拥有了我想要的所有功能,并且只有在那里我才重构了我的代码?我只是直接创建Matrix类,确保旧测试仍然通过,并且一切正常


谢谢,基本上是后者。不需要仅仅因为类被定义为不同的类就测试它。如果您在重构时没有添加任何功能或改变行为,那么添加测试的唯一原因是您对代码的某个部分缺乏信心。否则,代码已经在测试中,通过另一个类对其进行测试的事实应该无关紧要


也就是说,有时代码的结构已经发生了很大的变化,以至于出于组织目的,您希望移动测试,因此您可以知道这段代码实际上是从哪里进行测试的。但这与“这是一个独立的单元,所以它必须有独立的测试”是不同的。对于这种重构,编译器应该指导您。将所有需要的内容放入一个单独的类中并编译。它将告诉您在生产代码和测试中需要在何处使用新类。重构所有内容,直到编译并重新测试

正确的方法是一个接一个地移动方法/属性,这取决于您对过程的适应程度

编辑您只需要创建足够的测试来覆盖您的代码。为了便于组织,您应该将主测试类中的测试转移到单独的类中,但仅此而已。如果重构过程需要您编写更多代码(例如,创建新类实例的方法),那么您也应该为此编写测试

假设您从一个类和一个测试类开始:

OneBigClass
 -Method1
 -Method2
 -Method3

OneBigClassTest
 -Method1ShouldDoSomething
 -Method2ShouldDoSomething
 -Method3ShouldDoSomething
重构后,您的类应该是这样的:

OneBigClass
 -Method1
 -Method2

SmallerClass
 -Method3

OneBigClassTest
 -Method1ShouldDoSomething
 -Method2ShouldDoSomething

SmallerClassTest
 -Method3ShouldDoSomething

一个相对常见的提示是,现在是萌芽类的时候了,即您已经有了要测试的私有方法。在这种情况下,让测试真正驱动重构。在(尚未编写)类中为(当前私有)方法编写测试;将新类的一个实例提供给现有类,并将私有方法移动到新类中,同时将其公开。

是的,我现在正在研究我的测试方法,没有一个方法值得移动到这个新矩阵类的测试类中。我想我只需要重构,让一切都保持原样。这正是发生在我身上的事情。当我读了你的帖子后,我立刻知道该怎么做:P