Unit testing 当内部已经被覆盖时,单元测试类的公共接口?

Unit testing 当内部已经被覆盖时,单元测试类的公共接口?,unit-testing,Unit Testing,我已经用单元测试介绍了类的内部实现。现在测试我的公共接口(这是一个比内部方法调用链多一点的函数)仍然有用吗 感觉上我将添加额外的测试来测试相同的东西 或者,测试公共接口更像是一种集成测试(即使我已经中断了数据访问,所以所有数据都在内存中处理),以测试所有经过单元测试的方法是否能够很好地协同工作 例如: internal bool internalCheck() { // complex logic that is being unit tested } internal void in

我已经用单元测试介绍了类的内部实现。现在测试我的公共接口(这是一个比内部方法调用链多一点的函数)仍然有用吗

感觉上我将添加额外的测试来测试相同的东西

或者,测试公共接口更像是一种集成测试(即使我已经中断了数据访问,所以所有数据都在内存中处理),以测试所有经过单元测试的方法是否能够很好地协同工作

例如:

internal bool internalCheck() {
    // complex logic that is being unit tested
}

internal void internalDoSomething() {
    // do stuff. is being unit tested
}

public void DoIt() {
    if (internalCheck()) {
        internalDoSomething();
    }
}
现在,如果我要添加测试
DoIt
的测试,我将基本上重新测试
internalCheck
的所有逻辑流,并断言当它返回true时,调用
internalDoSomething

嗯,我想我已经弄明白了:
我需要模拟类本身并检查是否进行了正确的调用,几乎忽略了实际的输入/输出。为了测试公共方法,而不是重新测试
internalCheck
,我使用模拟框架让
internalCheck
返回我想要测试的流,然后验证调用了正确的方法。

这取决于您如何定义单元。通常是类,所以这仍然是一个单元测试

即使您已经测试了内部方法,测试公共接口仍然很重要,以确保内部方法协同工作