【发布时间】:2013-11-20 21:28:09
【问题描述】:
在 Rascal 中,您可以通过在布尔函数上指定 test 修饰符来定义测试函数。并通过在 Rascal 命令行中键入 :test 来运行它们。详情见over here。
是否也可以指定测试装置(用于测试套件)?比如setup()和teardown()函数?
【问题讨论】:
标签: rascal
在 Rascal 中,您可以通过在布尔函数上指定 test 修饰符来定义测试函数。并通过在 Rascal 命令行中键入 :test 来运行它们。详情见over here。
是否也可以指定测试装置(用于测试套件)?比如setup()和teardown()函数?
【问题讨论】:
标签: rascal
您可以通过在编写测试的模块中包含一个全局变量来编写设置函数:
bool s = setup(); // is called
int myGlobal1 = 2;
bool setup() {
myGlobal1 = 1;
}
teardown 不是那么必要,因为我们在 Rascal 中除了这些全局变量之外没有那么多状态。
在测试之间共享状态的另一种可能更好的方法是使用@memo 函数:
@memo
value getMyExampleData(int input) = ...;
test bool myTest1() {
myData = getMyExampleData(1);
return /shouldContainThis x := myData;
}
test bool myTest2() {
myData = getMyExampleData(1);
return /shouldContainThisToo y := myData;
}
第二次调用 getMyExampleData 会非常快,因为结果是从缓存中获取的。如果JVM内存不足,缓存会自动清除。
顺便说一句,还有一些对随机测试的支持,如:
test bool myTest(int i, int j) = i + j == j + i;
那么测试运行器会为测试函数的参数生成大量随机输入。您也可以通过一些标签来影响输入生成。如果您有兴趣,请告诉我们。
【讨论】:
@memo 究竟做了什么的更多(在线)信息?周一会询问随机测试支持标签。
@memo ,因此如果您的值仅在注释中有所不同,请不要使用 @memo 因为它会受到伤害。