Testing Don';我不明白行为测试的目的

Testing Don';我不明白行为测试的目的,testing,Testing,我希望有人能帮助我看到这些测试的真正价值,因为我读了很多关于它们的书,甚至在最近的一个项目中与它们合作过。但我从未在测试中看到真正的价值。当然,我可以理解为什么要写它们,并看看它们是如何有用的。但这些类型的测试似乎没有什么投资回报。下面是我们代码库中某个类的示例: class ServiceObject : IServiceObject { Dependency _dependency; ServiceObject(Dependency dependency) {

我希望有人能帮助我看到这些测试的真正价值,因为我读了很多关于它们的书,甚至在最近的一个项目中与它们合作过。但我从未在测试中看到真正的价值。当然,我可以理解为什么要写它们,并看看它们是如何有用的。但这些类型的测试似乎没有什么投资回报。下面是我们代码库中某个类的示例:

class ServiceObject : IServiceObject
{
    Dependency _dependency;

    ServiceObject(Dependency dependency)
    {
        this._dependency = dependency
    }

    bool SomeMethod()
    {
        dependency.SomePublicMethod();
    }
}
然后在我们的行为测试中,我们将编写这样的测试(伪代码):

显然,缺少了一些细节,但是如果您熟悉这种类型的测试,您就会理解

因此,我的问题实际上源于这样一个事实,即我看不出知道我的ServiceObject调用依赖项方法是多么有价值。我理解其背后的原因,因为您希望确保该方法的逻辑符合它应该达到的部分。但我看不出这是一种可持续的测试模式

我编写了逻辑,并且知道代码应该如何工作,那么为什么在我测试它一次以确保它正常工作后,它会改变呢?现在,您可以说,如果您在团队环境中工作,您可能希望确保不会有人出现并更改代码,从而意外跳过依赖项,从而希望确保他们知道它。但是,如果出于合理的原因跳过了它呢。那么,整个测试,也许还有其他任何测试,都必须被取消


不管怎样,我只是希望有人能够揭示这些类型测试的真正潜力。

目标是单独测试类,真正的单元测试。验证其是否完全履行其职责

在这种情况下,代码相当简单。当处理路径中存在条件时,这种测试的值可能会变得更清晰,参数会传递给依赖项,并且会对依赖项的结果执行处理

例如,假设一个方法是这样的:

bool someMethod(int paramX, int param Y ){

    if ( (paramX / paramY) > 5 ){
         return dependency.doOneThing(paramX);
    } else {
         return dependency.doSomethingElse(paramY);
    }

}
现在我们有很多测试要编写,我认为它的价值变得更加明显。尤其是当我们编写一个paramY设置为零的测试时

bool someMethod(int paramX, int param Y ){

    if ( (paramX / paramY) > 5 ){
         return dependency.doOneThing(paramX);
    } else {
         return dependency.doSomethingElse(paramY);
    }

}