【问题标题】:Does the Rascal unit testing framework has support for a test fixture?Rascal 单元测试框架是否支持测试夹具?
【发布时间】:2013-11-20 21:28:09
【问题描述】:

在 Rascal 中,您可以通过在布尔函数上指定 test 修饰符来定义测试函数。并通过在 Rascal 命令行中键入 :test 来运行它们。详情见over here

是否也可以指定测试装置(用于测试套件)?比如setup()teardown()函数?

【问题讨论】:

    标签: rascal


    【解决方案1】:

    您可以通过在编写测试的模块中包含一个全局变量来编写设置函数:

    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。但是关于它的了解并不多。它所做的只是缓存函数的结果,当给定相同的参数时,它会从缓存中生成结果而不是重新计算。当 Java GC 需要更多内存时,缓存会被释放(尝试预测 :-)
    • 注意注释,在 Rascal 中,在决定相等性时不会考虑注释。这也适用于 @memo ,因此如果您的值仅在注释中有所不同,请不要使用 @memo 因为它会受到伤害。
    猜你喜欢
    • 2015-09-09
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多