所以我正在尝试测试一个控制器,在我的代码中,它可以访问在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在测试期间,我的控制器知道静态类的正确方法是什么?希望有意义
提前致谢
答案 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);
}
}
希望这是你正在寻找的。 p>