为什么我的自定义成员变量没有在其他类中更新?

时间:2017-04-07 12:14:28

标签: java oop arraylist scope static

所以我正在开展一个项目,我需要设计一个有玩家的游戏。在Game对象中,我已经初始化了一个玩家并为这个玩家设置了一个吸气剂:

Player declaration getPlayer method

玩家只知道自己的定居点。每当我找到新的和解时,应该将结算添加到特定玩家的定居点arraylist。因此,在玩家类中,我已经初步确定了一个定居点的arraylist,以及一种为该arraylist添加解决方案的方法。

Player's settlements array AddToSettlement

当我为多个找到的结算调用编写测试时,我添加的结算不会持久存在于我的Game对象内的函数调用之外:

found settlement

我知道这是某种某种范围或静态声明错误,但我不明白为什么我的实施不起作用。非常感谢任何帮助!

编辑:这可能是一个没有传递的更好的例子。

map.foundNewSettlement(new Coordinate(1,1));
map.foundNewSettlement(new Coordinate(-2,3));
System.out.print(map.getPlayer().getSettlements().size());

当应该为2

时,打印的尺寸为0

2 个答案:

答案 0 :(得分:2)

在每个启动的测试方法中重新初始化实例字段 因此setMaximumHeight实例在测试方法之间不是持久的。

如果第二个测试测试“添加第二个结算”有效,则应在调用测试方法之前先添加一个结算(即创建测试的初始上下文):game

此外,测试方法不应该依赖于其他测试方法的先前副作用。
保持测试方法的独立性,使其保持隔离和可维护。

因此,您应该为每个测试方法创建初始化上下文。
开始时,您可以直接在测试方法中执行此任务。
稍后如果你开始重复自己关于初始化上下文,你可以引入私有方法来实现它。

这是一个非常简单的示例,展示如何使用JUnit创建上下文:

addSettlement()

答案 1 :(得分:1)

除了@davidxx回答:

您可以在测试中使用静态游戏变量:

private static Game game = new Game();

或者如果您需要更多操作,请使用static阻止

    private static Game game;
    static
    {
       game = new Game();
       ... do more preparations ... 
    }

或更正确的JUnit方式,以获得@BeforeClass带注释的静态方法

private static Game game;

@BeforeClass
public static void init()
{
    game=new Game();
    ... do more preparations ... 
}