【发布时间】:2014-11-07 00:47:59
【问题描述】:
我正在为 Intellij Idea 开发插件并进行一些测试。在我的一项测试中,我需要更新持久状态。但它没有发生,loadState 和 getState 都没有被调用。
我编写了实现PersistingStateComponent 的类(我认为我做得对,因为这不是我第一次这样做)。在一项测试中,我调用了将数据添加到 State 类的方法,它已成功添加但未保存。另一个应该得到该数据,但它变成了空State。测试类实现LightPlatformTestCase.
文档说:
持久化组件生命周期之后调用loadState()方法 组件已创建(仅当存在一些非默认 组件的状态持久化),并且在 XML 文件之后 持久状态在外部更改(例如,如果项目 文件是从版本控制系统更新的)。在后一种情况下, 该组件负责更新 UI 和其他相关的 组件根据改变的状态。
每次保存设置时都会调用 getState() 方法(例如 例如,在帧停用或关闭 IDE 时)。如果国家 getState() 返回的状态等于默认状态(通过 使用默认构造函数创建状态类),什么都不是 保留在 XML 中。否则,返回的状态在 XML 和存储。
那么有没有可能这些情况都不发生?
我可以在测试方法中做些什么来更新我的持久状态吗?
或者它应该可以工作,我应该在我的代码中寻找问题?
更新:当我运行插件时它工作正常。
我的班级是这样的:
@State(name = "MyStateName", storages = {@Storage(id="MyStateId", file = "D:/MyStateName.xml")})
public class MyClass
implements PersistentStateComponent<MyClass.State> {
public static class State{
Integer someValue = 10;
}
State myState = new State();
public State getState() {
return myState;
}
public void loadState(State state) {
myState = state;
}
public SFApexClassWrapp getValue() {
return myState.value;
}
public void addValue(Integer value) {
myState.value = value;
}
}
【问题讨论】:
-
当您运行插件本身时,持久状态是否会被加载/保存?您是否使用
implements PersistentStateComponent<Xxx.State>模式-您可以发布一些显示此和State类的代码吗? (它是一个内部类吗?) -
当我运行插件本身时它会被保存。我更新了我的问题。
-
请看我的第二个问题:我有一些配置类,我需要存储它的几个实例。我试图在我的 State 类中创建这些对象的列表,但它不起作用。我怎样才能做到这一点?是否可以将此类对象存储在具有不同名称的不同 xml 文件中?
-
好吧,如果插件工作正常但测试失败 - 那么问题出在测试上 ;) 您如何选择
LightPlatformTestCase作为这种情况下的正确测试? -
我选择了
LightPlatformTestCase,因为它提供了我需要获取我的项目和应用程序服务等的应用程序和项目。我不确定这是最好的测试,但我没有找到更好的测试。其实我的测试经验很差,几乎不存在。
标签: java testing intellij-idea intellij-plugin