这是一个设计问题,我不是在寻求实施。
我如何“正确”设计一个对象,该对象采用各种类型的多个参数和(与配置分开)测试这些参数的规则,以便输出是参数中的值是否通过与之关联的测试它们?
通过“正确”我的意思是,它应该尽可能高效,很容易随意添加新规则配置,只需传递更多参数而无需编译。此外,它不应该(我希望)要求规则配置知道传入的参数的索引(正如我当前的实现所做的那样)并生成设计良好的代码。
感谢。
接口的基本示例如下:
配置:
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数组中要与之比较的索引(这意味着配置编写器必须知道程序员如何加载该数组)。感觉好像有一个更好的设计解决方案来解决这个问题。
答案 0 :(得分:1)
我在使用软件测试工具(例如Boost Unit Test Framework)在我的实际业务中断言约束方面非常成功。在日常工作中,我实际上使用的是Python的单元测试框架,但这个想法完全相同。
假设给定的航天器轨迹不应该比给定的一组物体的距离更近,例如1000公里。您可以使用以下工具(伪代码)创建轨迹的“单元测试”:
trajectory = Trajectory::ReadFromFile("mytraj")
for body in bodies:
for state in trajectory.every_x_seconds:
BOOST_REQUIRE_GT(state.altitude_relative_to_body(body))
同样:您不是在测试软件,但您可以使用软件测试工具来测试自己的业务限制。