【问题标题】:Unit-Testing delegating methods单元测试委托方法
【发布时间】:2010-08-13 05:09:00
【问题描述】:

对一个方法进行单元测试是否有任何意义,它唯一做的事情就是委托另一个对象的工作?示例:

class abc {

    ...

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

    ...
}

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

谢谢

【问题讨论】:

  • 一开始为什么会有这个方法?亚格尼...
  • 我需要它。我已经在运行 FallingPiece.MoveLeft() 代码。

标签: c# java unit-testing tdd


【解决方案1】:

如果我这样做,您的代码会中断吗?如果可以,那么您需要进行测试才能捕获它。

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

假设:abc 是公共/公开类型,而fallingPiece 是依赖项。如果这成立,那么您需要一个测试来测试 MoveLeft 行为。如果它不是公共类型,那么您需要对使用 abc 作为合作者/依赖关系的公共类型 XYZ 进行测试。您不直接对其进行测试,但仍需要对其进行测试。

【讨论】:

  • 嗯。我没有考虑过 abc 的可访问性。我会说它可能不会向外界公开。 FallingPiece 确实是一个依赖项。
【解决方案2】:

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

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

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

【讨论】:

  • 嗯,我没有明白你所说的内联方法的意思。你能再清楚一点吗?谢谢
  • 通过内联,我认为他的意思是无论你有 MoveLeft() 放置fallPiece.MoveLeft()。如果您有 abc.MoveLeft 并将其替换为 abc.fallingPiece.MoveLeft(),这可能不是一个好主意。
  • 我同意 abc.fallingPiece.MoveLeft() 是不好的形式。在这一点上,我必须查看更多代码才能做出建设性的评论。但是,看到您在下面关于这是一种非公共方法的回应,无论如何都没有人会调用 abc.fallingPiece.MoveLeft();只是 abc 中的一些其他代码会调用fallingPiece.MoveLeft()。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2015-05-10
    • 2022-07-02
    • 2016-08-21
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多