【发布时间】:2011-03-20 17:11:54
【问题描述】:
是否有一种健全的方法来对随机过程进行单元测试?例如,假设您已经为特定系统模型编写了模拟器。模拟器根据 rngs 的种子随机工作,因此无法预测系统的状态,如果可以,则每次测试都应在尝试测试类的任何方法之前将系统置于特定状态。有没有更好的方法来做到这一点?
【问题讨论】:
标签: unit-testing simulation stochastic-process
是否有一种健全的方法来对随机过程进行单元测试?例如,假设您已经为特定系统模型编写了模拟器。模拟器根据 rngs 的种子随机工作,因此无法预测系统的状态,如果可以,则每次测试都应在尝试测试类的任何方法之前将系统置于特定状态。有没有更好的方法来做到这一点?
【问题讨论】:
标签: unit-testing simulation stochastic-process
这是涵盖此主题的nice blog post。基本上你需要将一个受控随机性注入到被测对象中。
【讨论】:
也许你可以使用 JUnit Theories 来解决这个问题。
【讨论】:
两个明显的选择是消除随机性(即,为您的单元测试使用固定的、已知的种子并从那里开始),或进行统计测试(即,运行相同的测试用例一百万次并验证均值和方差(等)符合预期)。后者可能是对您系统的更好测试,但您将不得不忍受一些误报。
【讨论】:
您需要找到系统的 Q0 和 p00。 p00 是预测状态,而 qo 是 计算的状态。预测的状态可以导致找到循环系统,它是 最小值,比如系统中的 k。
【讨论】:
如果您的模型是随机的,那么您可以将输出视为随机生成的样本。然后,在您的单元测试功能中,您可以执行某种带有置信区间的假设测试。如果测试输出在置信范围内,则测试成功。但是,有可能产生假阳性/假阴性。
【讨论】: