gpt4 book ai didi

c# - 无法理解如何在单元测试中使用 Mock

转载 作者:太空宇宙 更新时间:2023-11-03 17:35:49 26 4
gpt4 key购买 nike

我定义了以下单元测试:

[TestMethod] //@Test for the Java crowd
public void In_The_Beginning_All_The_Board_Is_Black()
{
IBoard board = new Board(new Size(10, 22));
BoardEngine boardEngine = new BoardEngine(board);

for (int y = 0; y < boardEngine.Size.Width; ++y)
{
for (int x = 0; x < boardEngine.Size.Width; ++x)
{
Assert.AreEqual<Color>(Color.Black, boardEngine.GetCellAt(new Point(x, y)).Color);
}
}
}

现在,问题是目前一切都很简单,我可以像显示的那样实例化 Board,在构造函数中将其大小传递给它。我知道稍后我会有一个更复杂的 Board,它有很多依赖项,所以我想尝试用模拟来编写这个测试。问题是我不知道怎么做。我应该用这个模拟设置什么?

我要测试的行为是,当 BoardEngine 被实例化时,板上的所有单元格都必须将其颜色设置为黑色。我如何在使用 Mock 而不是 Board 类的测试中表示它?

在内部,我目前在 BoardEngine 中只有一个 IBoard 字段:

public class BoardEngine {
IBoard board;

...

public BoardEngine(IBoard board) {
this.board = board;

SetAllCellsToBlack();
}


private void SetAllCellsToBlack() {
board.SetAllCellsTo(Color.Black);
}

...
}

IBoard定义如下:

public interface IBoard
{
Size Size { get; }
BoardCell GetCellAt(Point location);
void SetCellAt(Point location, BoardCell cell);
void SetAllCellsTo(Color color);
}

我在这里采取的方法是否正确?也许问题是因为 BoardEngine 基本上将其所有工作委托(delegate)给 IBoard,我应该测试 IBoard 实现而不是 BoardEngine ?


编辑

因此,如果我没有正确理解你们想要告诉我的内容,我有 2 个选择:

  1. 我可以对 BoardEngine 和 Board 进行(我的想法,如果我错了请纠正我)单元测试。 BoardEngine 的单元测试将使用 Board 的 Mock 对象检查调用是否正确执行。委员会的单元测试实际上不需要模拟,只是检查当我运行 SetAllCellsTo(Color color) 时它真的会把它们变成那种颜色。有了这个,我正在测试行为。
  2. 我实际上拥有的是一个测试,该测试在使用 Board 实例实例化 boardEngine 后测试状态,检查所有的 board cells 以查看它们是否为黑色。在这里,我正在测试状态。

这是正确的吗?

另外,在使用TDD时,我应该先做哪些测试?我会说类型 1 的测试。我什么时候应该使用类型 2 的测试?

谢谢

最佳答案

关于这种 TDD 的另一件事是,功能应该由端到端测试驱动,以确保所有部分都可以组合在一起。因此,单元测试通过驱动整个游戏的更高级别的测试来锻炼 BoardEngine 与其 Board 的关系。

关于c# - 无法理解如何在单元测试中使用 Mock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com