我正在为Intellij Idea开发插件并进行一些测试。在我的一个测试中,我需要持久化状态进行更新。但它没有发生,loadState
和getState
都没有被调用。
我编写了实现PersistingStateComponent
的类(我认为我做得正确,因为它不是我第一次这样做)。在一个测试中,我调用将数据添加到State类的方法,并且已成功添加但未保存。另一个应该获取该数据,但它变为空State
。测试类实现LightPlatformTestCase.
文档说:
持久性组件生命周期之后调用loadState()方法 已创建组件(仅当存在某些非默认值时) 状态持久化为组件),并在XML文件后用 持久状态在外部更改(例如,如果项目 文件已从版本控制系统更新)。在后一种情况下, 该组件负责更新UI和其他相关的 根据改变状态的组件。
每次保存设置时都会调用getState()方法(for 例如,在帧停用或关闭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;
}
}
答案 0 :(得分:2)
当您使用PersistentStateComponent时,您作为插件开发人员的唯一责任是返回State类的实例。因此,作为插件开发人员测试您唯一有意义的是您的实例正确返回。您不需要测试XML序列化,因为它是IntelliJ IDEA代码的一部分,这不是您的责任,并且已经经过合理的测试。
这就是为什么当IntelliJ IDEA运行代码测试时,它不会保存或加载组件的设置。如果需要,您可以手动触发设置保存,但一般情况下您无需这样做。
请发布有关存储配置对象的多个实例的单独问题。