当前位置: 首页 > 知识库问答 >
问题:

测试作为映射实现的状态机转换

吴飞语
2023-03-14

我有一个状态机,它有一组相对较小的状态和输入,我想详尽地测试转换。

enum State {
    S1,
    // ...
}

enum Input {
    I1,
    // ...
}

class StateMachine {
    State current;

    Map<State, Map<Input, State>> transitions = {
        S1: {
            I1: S2,
            // ...
        },
        // ...
    };

    State changeState(Input x) {
        if (transitions[current] == null)
            throw Error('Unknows state ${current}');
        if (transitions[current][x] == null)
            throw Error('Unknown transition from state ${current} with input ${x}');

        current = transitions[current][x];
        return current;
    }

    void execute() {
        // ...
    }
}

为了测试它,我看到了3种方法
1)编写大量样板代码来检查每个组合
2)自动创建测试:对我来说,这似乎是一种更好的方法,但最终使用的结构与状态机中使用的映射相同。我该怎么办?在测试文件中复制映射,还是从实现文件中导入映射?后者会使测试文件依赖于实现,这似乎不是一个好主意
3)相等性测试图,与之前相同的问题:与自身相等还是与副本相等?这种方法基本上就是我对另外两种方法所做的,但看起来不像是一种规范测试

共有1个答案

严承允
2023-03-14

也许你想看看这个:https://www.itemis.com/en/yakindu/state-machine/documentation/user-guide/sctunit_test-driven_statechart_development_with_sctunit

它展示了如何进行基于模型和测试驱动的状态机开发,包括生成单元测试代码和测量测试覆盖率的选项。

 类似资料:
  • 我在youtube上按部就班地学习教程,但我没有得到结果。代码如下: 主要应用 或来自Chrome的以下内容: 白标签错误页 此应用程序没有/error的显式映射,因此您将其视为一种后退。

  • 问题 你想实现一个状态机或者是在不同状态下执行操作的对象,但是又不想在代码中出现太多的条件判断语句。 解决方案 在很多程序中,有些对象会根据状态的不同来执行不同的操作。比如考虑如下的一个连接对象: class Connection: """普通方案,好多个判断语句,效率低下~~""" def __init__(self): self.state = 'CLOSED

  • 我有一个简单的Java单模块Gradle项目,其中我使用Mapstruct进行Java映射。我的如下所示: 我的源文件夹包含以下Java源代码:

  • 我一直在研究Jackson,但似乎必须将映射转换为JSON,然后将生成的JSON转换为POJO。 有没有一种方法可以将地图直接转换成POJO?

  • 映射容器端口到宿主主机的实现 默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。 容器访问外部实现 容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址伪装操作实现的。 查看主机的 NAT 规则。 $ sudo iptables -t nat -nL...Chain POSTROUTING (policy ACCEP