【问题标题】:Unit Testing - Passing enum as method parameters in Test Class单元测试 - 将枚举作为测试类中的方法参数传递
【发布时间】:2021-04-09 22:02:43
【问题描述】:

我有一个名为 Game 的课程。我想知道在这种情况下将 Game 类中的枚举作为方法中的参数传递给 Test 类的最佳做法是什么

游戏类有以下内容:

public enum Result
{
  Zero,
  One,
  etc...
}

public int ResultCount(Result result)
{
  switch(result)
  {
    case Result.Zero
         return 0;
    case Result.One
         retun 1;
    etc...
  }
}

public void CurrentResult(Result hometeam, Result awayteam)
{
  setHomeTeamGoals(hometeam);
  setAwayTeamGoals(awayteam);
}

然后我有一个单元测试类,我想在设置中设置结果

 [TestFixture]
    public class Result_is_1_1
    {
        private Game _game;

        [SetUp]
        public void SetUp()
        {
            _game = new Game();
            _game.CurrentResult(Result.One, Result.One);
        }

当我使用以下内容时它可以工作

using static unitTest.Game;

但我不确定这是否是不好的做法/快速修复等。

推荐的方法是什么?

【问题讨论】:

  • 你是专门问using static的使用吗?如果是这样,是什么促使您首先使用它?

标签: c# .net unit-testing nunit


【解决方案1】:

很难回答您的问题,因为您没有提供完整/有效的代码。但我猜您将Result 定义为Game 类中的嵌套枚举,这会造成一些混乱。

所以我假设你的 Game 类看起来像这样:

public class Game
{
    public enum Result
    {
        Zero,
        One,
    }

    // Other methods...
}

假设是这种情况,您的枚举的全名是Game.Result,因为Result 是在Game 中定义的。

因此,当您想从单元测试(或任何其他类)中引用 Result 枚举时,您有两个选择。

选项 1,引用 Game.Result(不需要 using static):

_game.CurrentResult(Game.Result.One, Game.Result.One);

选项 2,使用 using static 语句,就像您所做的那样:

using static unitTest.Game;
// ...
_game.CurrentResult(Result.One, Result.One);

(奖励第三个选项,您可以在 Game 类之外定义 Result 枚举。那么您不必担心选项 1 或 2。)

假设我正确理解了您的问题,那么这不是一个糟糕的测试实践。事实上,它根本与测试无关。这只是一个语言功能。就个人而言,我更喜欢使用全名Game.Result,而不是使用using static 语句。

【讨论】:

  • 正是我正在寻找的答案。谢谢!
【解决方案2】:

是的,对您的测试类使用静态通常是一种表明测试设计不佳的气味。如果您想让您的测试独立,就像单元测试的通常做法一样,请通过在您的 SetUp 方法中实例化每个测试来为每个测试创建一个新游戏 - 就像您现在所做的那样。

如果您想在同一个游戏中按顺序执行多个步骤,通常的方法是在测试本身中执行这些步骤。

如果您希望每个测试方法实际上成为按特定顺序执行的步骤,那么您将远离通常认为的单元测试并进行不同类型的测试。你也远离了 NUnit 最擅长的东西。

然而,如果你真的想要,你可以在 [OneTimeSetUp] 方法中创建你的游戏,并使用 OrderAttribute 对所有测试进行排序,以便按顺序运行它们。这使您的测试有些脆弱,因为每个测试都依赖于之前运行的所有测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2022-11-01
    • 2012-04-18
    相关资源
    最近更新 更多