【问题标题】:How to make a setUp method which creates objects for all the classes?如何创建一个为所有类创建对象的 setUp 方法?
【发布时间】:2016-10-26 13:01:46
【问题描述】:

我有一个非常庞大的项目,我正在尝试制作游戏。我的课程是:

  • 游戏(主)
  • 播放器
  • 怪物
  • 战场
  • 项目
  • 输入读取器
  • 实用程序

存在很大的依赖链,因为某些方法运行其他方法。播放器类具有buyItem 和SellItem 等方法,通过HashMap 使用Item 类中的Item 对象。无论如何,我应该在我的 unitTest 类中创建一个 SetUp 方法,该方法为所有类创建对象并将 Items 放入 player 集合中。我知道如何对单个方法进行基本的单元测试,但我无法理解这一点。请善待,我知道一旦我理解它可能会很明显。

【问题讨论】:

  • 这里没有什么特别之处:只需编写代码来创建对象,就像在游戏的 main 方法中一样。
  • 没有阅读完整的问题,听起来你不是单位,而是ingetration-testing。你可能想看看Object mocking,只模拟你直接需要的依赖项。
  • 也许你可以隔离一个你想测试的问题,那么这将是一个更具体的问题。

标签: java unit-testing


【解决方案1】:

创建一个执行所有初始化的方法并使用@BeforeClass1

对其进行注释
@BeforeClass
public static void initialize() {
    game = new Game()
    // further setting up
}

这个方法会运行一次,在类中定义的所有单元测试都被执行之前。


1:这个链接下还有更多的JUnit注解http://junit.sourceforge.net/javadoc/org/junit/package-summary.html

【讨论】:

  • 否决,因为在方法被声明为静态之前这将不起作用。当你解决这个问题时,我会删除反对票。
  • 只有在使用静态变量时才需要是静态的。我确信 OP 可以调整它以适应用例。
  • 不,又错了。如果可以的话,我会再次投票。你试过了吗? java.lang.Exception: Method setup() should be static
  • 啊,看来你是对的。刚刚测试了一下,JUnit要求方法是静态的。
【解决方案2】:

你从错误的方向看事情:

  1. 您不进行单元测试是因为有人告诉您“那样做”。您这样做是因为它为您的开发过程增加了价值。所以,如果没有增值,那就不要这样做(或者很可能:退后一步,学习如何以帮助你的方式进行单元测试)
  2. 单元测试的整个想法是在最小可能的单元上工作。因此,当您发现您的单元测试一直“需要一切”时,很可能……您创建了一个难以测试的设计。因此,这可能表明您需要退后一步,重新审视您当前的设计!

如果您真的对从单元测试中获得价值感兴趣,您应该研究资源,例如这些videos 解释如何编写“可测试代码”。或者theartofunittesting等材料。

换句话说:编写单元测试是一项需要训练的技能。尤其是第一步是困难;但是解释所有这些事情会破坏 SO 问题/答案的范围。

【讨论】:

  • 正如我所说,这是我老师的一个项目(作业)。我写的基本上是一个字一个字,他让我做什么。我只是在寻找这个特定任务的输入。完成任务后,我将更多地研究单元测试的整个想法。可悲的是,时间限制总是那么短,在我们必须继续进行下一部分作业之前,我们真的没有时间彻底研究任何事情。现在我只需要掌握基本的想法,这样我就可以继续前进,并在时间限制之前完成它。
猜你喜欢
  • 2019-07-19
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多