目前,在我的测试框架中,为了跟踪测试结果,我正在维护4D数组:TestResult [domain] [client] [testno] [resourceno]
测试用例基本上有3个循环
For each domain(0-2)
For each client(0-8)
For each resource(0-8)
Execute test1
Store TestResult
Execute test2
Store TestResult
除了4D数组之外,是否还有更好的数据结构可用于C语言?
答案 0 :(得分:0)
好吧,让我们回到相反的极端:
typedef struct
{
// whatever you need...
} Resource;
typedef struct
{
Resource a;
Resource b;
// ...
Resource g;
} Client;
typedef struct
{
Client a;
Client b;
// ...
Client g;
} Domain;
好的,我跳过了Test
结构和包含所有域的结构,这个想法应该仍然很清楚...
void processResource(Resource* resource)
{ /* ... */ }
void processClient(Client* c)
{
processResource(&c->a);
// ...
processResource(&c->g);
}
void processDomain(Domain* d)
{
processClient(&d->a);
// ...
processClient(&d->g);
}
如上所述,这是另一个极端。您可以在结构中维护数组,以便可以迭代为:
void processDomain(Domain* d)
{
for(size_t i = 0; i < sizeof(d->clients)/sizeof(*d->clients); ++i)
{
processResource(d->clients + i);
}
}
或者在某些结构中具有一些较低的n维数组。任何组合都可以解决问题,取决于您,无论您认为哪种方法最合适...
您甚至可以扩展到动态数组:
typedef struct
{
Resource* resources;
size_t count;
} Client;
如果您认为管理可变数量的子元素很有用。
如果所有这些都比原始4D阵列“好” ?我会说,主要是出于口味问题,除非也许有更好的可重用性,尤其是较低层嵌套结构的重用性,但当前的用例似乎对于此实际应用而言太具体了。