有关边界值检查的问题

时间:2015-07-24 03:24:28

标签: junit boundary

我正在做我的JUnit作业,需要一些解释。

这是我的家庭作业描述的引文:

边界条件的一个问题是,即使多次接近边界,系统也需要表现良好。这应该是显而易见的,但它并不总是在实践中发生。

请记住,我们可以将对象描述为状态和行为。通常,状态不是可直接访问的,而是通过行为间接访问。也就是说,行为反映了对象的状态。

现在,如果我们考虑数学中的边界,如果我们以不同的方式接近边界,那么想象某个边界的值会有所不同可能并不太令人惊讶。因此,如果该值可以比作该状态,则边界处的状态可能会根据我们如何到达那里而变化。这意味着行为可能会有所不同。

要使对象行为一致,我们必须确保这些边界的内部状态是一致的。因此,测试用例应该检查这个假设。要接收此作业分配的挑战点,请增强您的测试用例,以便发现边界周围的潜在问题。

使用字符串" ### challenge ###"清楚地标记Challenge测试用例。在评论中。在这些评论中包括正在测试的边界,以及您如何根据边界的接近方式猜测对象的状态可能会有所不同。

我不明白这一点,尤其是突出部分。他的意思是什么"对象表现一致"和潜在的问题"?

另外,这与一般边界检查有什么不同,它只会抛出异常并且我期望在JUnit中?

谢谢!

1 个答案:

答案 0 :(得分:2)

在不知道家庭作业的细节的情况下,答案可能只是一般性的,但我会尝试。

边界检查不只是异常检查,而是关于查看代码中的哪些路径在什么条件下执行。如果你有控制语句,循环,if-else,switch等,你必须验证(在你的内部状态下)这些语句是以什么方式处理的。

对我来说,边界测试是指您以一种导致行为通过代码的不同分支运行的方式更改实例字段的某些值。

例如,你有这种行为:

if(someInstanceValue > 5) {
    return "great";
} else {
    return "poor";
}

现在,您可以使用定义边界的someInstanceValue数据进行测试

  • 4:"穷人"
  • 5:"很棒"

如果您的班级中有多个字段,所有字段都会定义状态,但只有部分字段可能会影响代码中的某个路径。由于测试是您所测试的类的规范,用代码编写,您应该指定哪些字段与函数相关,哪些不是(通过将它们遗漏)。 因此,您应该相应地设置您的测试实例(调用所有setter),或者如果您需要更复杂的对象,您可以使用Mockito之类的框架来指定状态(使用when().thenReturn()语法)。

如果您想验证是否涵盖了所有界限,可以使用PIT等变异测试工具对您的套件进行突变测试。它将翻转代码中的开关(即用<替换>=)以检查您的测试是否会失败。通常,它是改善测试方式的良好灵感来源。

Neverthelss,家庭作业的某些部分对我来说听起来有些混乱。你可以从两个方面接近边界,好吧,但是没有表示 THE 边界的状态,你可以在边界的一边或另一边。如果方式,你如何接近边界的一侧是重要的,并且对象的行为取决于&#34;历史&#34;如何到达那个州,历史成为国家的一部分。换句话说:不同的历史=不同的状态。

请记住:每个实例字段都是状态的一部分。实例字段的每个可能的组合值都定义了单个状态。从一个组合到另一个组合的每次转换都是通过调用行为触发的状态转换。没有想到你的测试描述这个状态机,列出{currentState,input} -> nextState的三元组(输入是方法调用)。这基本上是良好测试应该具有的Given-When-Then结构。