Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试委托方法_C#_Java_Unit Testing_Tdd - Fatal编程技术网

C# 单元测试委托方法

C# 单元测试委托方法,c#,java,unit-testing,tdd,C#,Java,Unit Testing,Tdd,在单元测试一个方法时,它唯一做的事情就是在另一个对象上委托工作,这有什么意义吗?例如: class abc { ... public void MoveLeft() { fallingPiece.MoveLeft(); } ... } 为了学习的目的,我正在为我现有的一些课程做单元测试。例如,对这个MoveLeft()方法进行单元测试似乎有点奇怪。但我不确定如果我先做了测试会怎么样 感谢我对单元测试的理解是,它们的存在是为了确保方法

在单元测试一个方法时,它唯一做的事情就是在另一个对象上委托工作,这有什么意义吗?例如:

class abc {

    ...

    public void MoveLeft()
    {
        fallingPiece.MoveLeft();
    }

    ...
}
为了学习的目的,我正在为我现有的一些课程做单元测试。例如,对这个MoveLeft()方法进行单元测试似乎有点奇怪。但我不确定如果我先做了测试会怎么样


感谢

我对单元测试的理解是,它们的存在是为了确保方法中的逻辑在您不想更改时保持不变,而此方法中没有逻辑。我们在我工作的代码库中有很多这样的传递方法。表面上,它们是“控制器”类,但在大多数情况下,它们所做的只是传递到数据层

是的,您可以对它们进行单元测试,前提是您有办法模拟
fallingPiece
。如果您确实计划扩展MoveLeft方法以包含逻辑,那么这可能是一个好主意


然而,在我上面的评论中,在您真正需要引入向左移动的逻辑之前,最好只内联该方法。

如果我这样做,您的代码会中断吗?如果它会,那么你需要一个测试来捕捉它

class abc {
    ...
    public void MoveLeft()
    {
        // fallingPiece.MoveLeft();
    }
    ...
}

假设:abc是公共/公开类型,fallingPiece是依赖项。如果这一点成立,那么您需要一个测试来测试MoveLeft行为。如果它不是公共类型,那么您需要对公共类型XYZ进行测试,该类型使用abc作为协同器/依赖项。您不直接测试它,但它仍然需要测试。

此方法可能失败的一种情况是,当调用Abc.MoveLeft时,fallingPiece为null。拥有一个构建合法abc并调用abc.MoveLeft的测试用例可能是个好主意。 差不多 CanMoveLeft() { Abc=新Abc(); abc.MoveLeft(); Assert.That(abc.fallingPice已移到左侧)
}

首先,你为什么会有这种方法?雅格尼…我需要它。我一直在运行FallingPiece.MoveLeft()代码。嗯,我不明白你内联该方法的意思。你能说清楚一点吗?我想他指的是,无论你在哪里,都要把fallingPiece放进去。不过,如果您有abc.MoveLeft并用abc.fallingPiece.MoveLeft()替换它,这可能不是一个好主意。我同意abc.fallingPiece.MoveLeft()将是一种糟糕的形式。在这一点上,我必须看更多的代码才能做出建设性的评论。但是,看到您在下面关于这是一个非公共方法的回应,无论如何都不会有人调用abc.fallingPiece.MoveLeft();abc中的其他一些代码将调用fallingPiece.MoveLeft().Hmmm。我没有想到abc的可访问性。我想说,它可能不会向外界公开。FallingPiece确实是一个依赖项。