出于测试原因设置状态机的状态
Setting state of a state machine for test reasons
为了执行单元测试,我需要设置对象的特定状态。由于状态是用状态机实现的,MDriven拒绝将状态值直接赋值给属性。
我可能会触发整个状态机,直到达到所需状态,但我认为有一种更简单的方法可以将状态设置为特定值,该值相当隐藏,因为它通常不应该工作那样。
有人知道怎么做吗?
是 - 在此处阅读详细信息 https://wiki.mdriven.net/index.php/StateMachineForceMode
但基本上您将属性的状态机设置为 ForceMode - 在此之后您可以自由更改状态值:
self.stateMachineForceMode('State');
self.State:='State3';
public void StateMachineForceState(string NewState)
{ //use with caution
string ForceMode = "self.stateMachineForceMode('TheStateAttribute')";
string close = "self.TheStateAttribute :='close'";
string open = "self.TheStateAttribute='open'";
Eco.Handles.DefaultEcoSpace es = this.AsIObject().ServiceProvider().GetEcoService<IEcoSpaceService>() as Eco.Handles.DefaultEcoSpace;
switch (NewState)
{
case "close":
es.ActionLanguage.Execute(this, ForceMode);
es.ActionLanguage.Execute(this, close);
break;
case "open":
es.ActionLanguage.Execute(this, ForceMode);
es.ActionLanguage.Execute(this, open);
break;
default:
break;
}
}
为了执行单元测试,我需要设置对象的特定状态。由于状态是用状态机实现的,MDriven拒绝将状态值直接赋值给属性。
我可能会触发整个状态机,直到达到所需状态,但我认为有一种更简单的方法可以将状态设置为特定值,该值相当隐藏,因为它通常不应该工作那样。
有人知道怎么做吗?
是 - 在此处阅读详细信息 https://wiki.mdriven.net/index.php/StateMachineForceMode
但基本上您将属性的状态机设置为 ForceMode - 在此之后您可以自由更改状态值:
self.stateMachineForceMode('State');
self.State:='State3';
public void StateMachineForceState(string NewState)
{ //use with caution
string ForceMode = "self.stateMachineForceMode('TheStateAttribute')";
string close = "self.TheStateAttribute :='close'";
string open = "self.TheStateAttribute='open'";
Eco.Handles.DefaultEcoSpace es = this.AsIObject().ServiceProvider().GetEcoService<IEcoSpaceService>() as Eco.Handles.DefaultEcoSpace;
switch (NewState)
{
case "close":
es.ActionLanguage.Execute(this, ForceMode);
es.ActionLanguage.Execute(this, close);
break;
case "open":
es.ActionLanguage.Execute(this, ForceMode);
es.ActionLanguage.Execute(this, open);
break;
default:
break;
}
}