0

假设我有一堂像这样的课:

public class MyClass {

   private int var1;
   private int var2;

   public MyClass() {
      var1 = 0;
      var2 = 0;
   }

   public void setVariables() {
      var1 = 1;
      var2 = 1;
   }

我的班级中没有任何 getter 方法。

有没有办法用 JUnit 测试像 setVariables() 这样的 void 方法?如何在不直接访问变量值的情况下检查其行为?

4

3 回答 3

3

由于这种方法没有(从外部)可见的副作用,我可能不会对其进行测试。

据推测,您设置这些变量的事实会对其他方法产生副作用。在那里您可以测试其他方法是否按预期执行。

于 2012-07-17T17:36:36.307 回答
0

您可以使用反射来访问变量,在 groovy 中编写测试用例,这允许您动态添加 getter 方法,您可以使用某种 AOP(cglib,aspectJ)来测试该方法是否被调用......

于 2012-07-17T17:35:52.753 回答
0

您示例中的 setVariables 太简单而无法测试。如果您的真实方法有任何可见的效果(非私有状态),则测试该状态。如果状态是私有的,但对其他方法有影响,则将此方法与其他方法一起测试。如果你觉得 setVariables 太复杂了,应该单独测试,然后测试它。但请记住:在这个阶段您正在测试实现,而不是外部合同 - 当您更改实现时,您将不得不更改您的测试。如果你想这样做,我建议让 var1 和 var2 包可见 - 这对于测试非常方便。如果他们必须保持私有,那么唯一的解决方案是反射和像 whiteBox 这样的库

于 2012-07-17T17:51:02.060 回答