Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 您建议哪些开源框架/库用于基于模型的测试?_Java_Testing - Fatal编程技术网

Java 您建议哪些开源框架/库用于基于模型的测试?

Java 您建议哪些开源框架/库用于基于模型的测试?,java,testing,Java,Testing,Java中有没有流行的MBT框架?有人在使用MBT技术吗?实现基于模型的测试的一种方法是构建一个已知的良好实现,并与之进行比较。实现这一点的最佳策略之一是使用更高级别的语言,以使简短的实现易于阅读和推理 我已经成功地使用和对查询评估进行了基于模型的测试。我将查询语言表示为Haskell数据类型,然后简单地将其作为任意的实例。完成后,QuickCheck可以生成无限多的查询,然后我可以根据测试服务器和我的模型实现来评估这些查询 并且可能允许您在JVM上做同样的事情 作为一个如何使用的快速示例,下面

Java中有没有流行的MBT框架?有人在使用MBT技术吗?

实现基于模型的测试的一种方法是构建一个已知的良好实现,并与之进行比较。实现这一点的最佳策略之一是使用更高级别的语言,以使简短的实现易于阅读和推理

我已经成功地使用和对查询评估进行了基于模型的测试。我将查询语言表示为Haskell数据类型,然后简单地将其作为
任意
的实例。完成后,QuickCheck可以生成无限多的查询,然后我可以根据测试服务器和我的模型实现来评估这些查询

并且可能允许您在JVM上做同样的事情

作为一个如何使用的快速示例,下面是一个快速而肮脏的示例:

import Test.QuickCheck
import Control.Monad (liftM,liftM2)

-- An simple expression data type.
-- Expression is either (Add X Y, Minus X Y, Multiply X Y or just a plain value)
-- where X and Y are further expressions
data Expression = Add Expression Expression
                | Minus Expression Expression
                | Multiply Expression Expression
                | Value Int
                  deriving Show

-- This is my model-based approach, high level 
evaluate :: Expression -> Int                  
evaluate (Value x) = x
evaluate (Add lhs rhs) = evaluate lhs + evaluate rhs
evaluate (Minus lhs rhs) = evaluate lhs - evaluate rhs
evaluate (Multiply lhs rhs) = evaluate lhs * evaluate rhs
在此之后,我有了一个已知的简单模型的良好实现。仅仅通过检查代码,我就可以合理地确定这是我认为它应该做的。现在我可以使用
arbitral
生成任意复杂的表达式。下面的权重表示频率(因此70%的生成表达式为
Value
,10%为任意
Add
语句,依此类推)

此定义使QuickCheck能够创建任意表达式。例如:

> sample (arbitrary :: Gen Expression)
Multiply (Value 1) (Value 0)
Value 1
Add (Value (-3)) (Add (Value (-1)) (Minus (Value 3) (Value 0)))
Value (-4)
Value (-19)
Add (Value (-49)) (Value (-55))
Minus (Value 50) (Value 103)
Value 210
Value (-172)
Value (-907)
Value (-2703)
我觉得这已经很酷了(但也许我只是有点奇怪)。真正强大的一点是,现在我可以指定一个保存所有生成值的不变量

prop_testAgainstModel :: Expression -> Bool
prop_testAgainstModel expr = evaluate expr == evaluate' expr
我们假设,
evaluate'
是我评估事物的超级复杂的方式,我想根据我的模型来验证。然后,QuickCheck将生成大量任意表达式,并尝试反驳我的断言

下面是一个例子,我试图生成一个更复杂的求值函数

> quickCheck prop_testAgainstModel
*** Failed! Falsifiable (after 28 tests):  
Multiply (Value (-53758)) (Value 125360)

我用这个方法测试了一个用C++编写的外部服务器。Haskell模型的实现可能只有100行代码,我可以将其与web服务的结果进行比较,但代码并不比上面的多。

从网站:

是一个Java库,可扩展以支持基于模型的测试


我正在寻找Java或动态vm语言中的一些东西也许你可以使用Scala和它的QuickCheck()版本实现同样的方法你能解释一下QuickCheck在MBT中的帮助吗?我可以向它描述状态转换以便它能够生成测试吗?我试图在代码中添加更多的描述,希望这能更清楚地解释我的意思。thans jeff..我想我现在会继续使用ModelJUnit。我还找到了另一个看起来相当不错的
> quickCheck prop_testAgainstModel
*** Failed! Falsifiable (after 28 tests):  
Multiply (Value (-53758)) (Value 125360)