0

这是一个设计问题,我不是在寻找实现。

我将如何“正确”设计一个对象,该对象采用多个不同类型的参数和(与配置分开)测试这些参数的规则,以便输出参数中的值是否通过与它们相关的测试?

我所说的“正确”的意思是,它应该尽可能高效,易于随心所欲地向配置中添加新规则,并且无需编译即可简单地传递更多参数。此外,它不应该(我希望)要求规则配置知道传入的参数的索引(就像我当前的实现那样)并生成精心设计的代码。

谢谢。

接口的一个基本示例如下:

配置:

num_rules: 2
rule0:
    parameter_index: 0
    comparison_operator: gt
    value: 12.3
rule1:
    parameter_index: 1
    comparison_operator: eq
    value: 19

推荐对象:

class RecoObj {
public:
    RecoObj(char *configFilename);
    bool recommend(float testParameter[]); // Returns true if all tests pass
...
} 

这是我目前的配置,有几个问题。它要求所有参数都是浮点数,并且要求规则知道要与之比较的 testParameter 数组中的索引(这意味着配置编写器必须知道程序员如何加载该数组)。感觉好像有更好的设计方案来解决这个问题。

4

1 回答 1

1

我在利用软件测试工具(例如Boost Unit Test Framework)在我的实际业务中断言约束方面非常成功。在日常的基础上,我实际上使用 Python 的单元测试框架,但想法是完全一样的。

假设一个给定的航天器轨迹永远不会比给定一组物体的 1,000 公里更近。您可以使用以下工具为轨迹创建“单元测试”(伪代码):

trajectory = Trajectory::ReadFromFile("mytraj")
for body in bodies:
 for state in trajectory.every_x_seconds:
  BOOST_REQUIRE_GT(state.altitude_relative_to_body(body))

再次重申:您不是在测试软件,但您可以使用软件测试工具来测试您自己的业务约束。

于 2013-10-29T00:26:05.023 回答