Juint用静态类测试

时间:2017-04-11 03:08:42

标签: java javafx junit

所以我正在尝试测试一个控制器,在我的代码中,它可以访问在main上创建的公共静态变量,称为settings。我已尝试设置我的Junit测试@Before尽可能创建在main中创建的相同静态类但是没有任何工作。

所以在我的代码中我有

public class Main extends Application {

//static variables that can be referenced from anywhere in the application
public static GameSettingsModel settings;

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage stage) throws IOException {

    //initiate the GameSettingsModel
    settings = new GameSettingsModel();

}

然后我试图测试一个在静态GameSettingsModel设置中使用函数的控制器,但我不能让它工作。

这是我的junit测试

public class Test extends TestSuite {

private IGame game;
private IBall ball;
private IPaddle paddle;
private IBrick player1Wall;
private IPlayer player1;
private IPlayer player2;

public static GameSettingsModel settings;

@Before
public void setUp() {
    //initiate the GameSettingsModel
    settings = new GameSettingsModel();

    player1Wall = new BrickModel(0,0,20);
    player1 = new PlayerModel();
    player2 = new PlayerModel();
    ball = new BallModel();
    paddle = new PaddleModel();
    game = new SinglePlayerController();
}

所以现在当我尝试运行测试时,我会在我的代码尝试调用settings.reset();

的行上得到一个NullPointerException

在测试期间,我的控制器知道静态类的正确方法是什么?希望有意义

提前致谢

2 个答案:

答案 0 :(得分:2)

不要从实例方法设置静态变量。事实上,没有可变的静态变量。根据您提供的代码,settings应该是一个实例变量。

答案 1 :(得分:1)

您可以通过仅在测试用例中使用的构造函数传递静态变量,也可以使用PowerMock模拟变量。例如:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ MyStaticClass.class })
public class MyTest {

    @Before 
    public void setup() {
        // Here you mock the variable with the method that is going to be executed    
        PowerMockito.mockStatic(MyStaticClass.class);
        PowerMockito.when(MyStaticClass.staticMethod).thenReturn(result);
    }

}

希望这是你正在寻找的。