【问题标题】:Call another method in Unit Test in same class在同一类的单元测试中调用另一个方法
【发布时间】:2021-09-09 14:49:40
【问题描述】:

我们有一个单元测试,它在这个单元内部引用了我服务中的另一个方法。我应该在当前单元测试中调用其他方法还是使用模拟解决方案?

在我的测试用例中,我们调用对方法ChooseDoor() 的引用来执行一些操作,然后我们调用Act 方法SwitchDoor(),我们应该使用一些模拟或者这种方法可以吗?因为我们调用的引用方法和行为,它们在同一个类中,对其他类没有任何依赖。

public class GameService
{
 public Door ChoosesDoor()
 {
 //some logic
 }

 public Door SwitchDoor()
 {
 //some logic
 }
}


[Fact]
public void switch_door_should_return_a_new_door_with_a_valid_state_that_chooses()
{
 //Arrange
 var oldChoosesDoor =_game.ChoosesDoor();

 //Act
 var newDoor = _game.SwitchDoor();

 //Assert
 oldChoosesDoor.DoorState.ShouldBe(State.Stateless);
 newDoor.DoorState.ShouldBe(State.Chosen);
 oldChoosesDoor.DoorState.ShouldNotBe(newDoor.DoorState);
 oldChoosesDoor.Number.ShouldBeInRange(1,3);
}

【问题讨论】:

  • 这取决于您要测试的具体内容。这是单元测试还是集成测试?
  • @HimBromBeere 这是单元测试。
  • 嗯,你正在测试的基本上是SwitchDoor 对其类状态的副作用。这意味着您期望通话后的状态与通话前的状态有所不同。这意味着您需要两种表示方式才能说明调用是否具有预期效果...
  • 你可能不应该嘲笑你的 SuT。
  • @HimBromBeere 我们没有任何 Io 调用,只需要运行第一个方法,然后检查方法 2。这些方法在同一个类中。

标签: c# .net unit-testing asp.net-core testing


【解决方案1】:

只要您进行 e2e 测试就可以了,但是对于单元测试,这样做会迫使彼此依赖。尽管您作为开发人员倾向于尽可能地重用代码,但对于单元测试,您将强制遵循 AAA 模式。

【讨论】:

  • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
【解决方案2】:

在设置过程中调用被测类的其他方法是完全可以的。
通过这样做,您还将测试另一种方法。请注意,您正在测试代码的行为。

即使在单元测试中,单元也是行为的一个单元,它可以包括单个或多个不同的方法或类型。

“独立测试”是指测试应该与其他测试隔离。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多