使用JUnit测试void方法

时间:2012-07-17 17:32:38

标签: java testing junit

假设我有一个类似这样的课程:

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方法?如何在不直接访问变量值的情况下检查其行为?

3 个答案:

答案 0 :(得分:3)

由于此方法没有可见的(来自外部)副作用,我可能不会测试它。

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

答案 1 :(得分:0)

你可以使用反射来访问变量,在groovy中编写你的测试用例,它允许你动态添加一个getter方法,你可以使用一些AOP(cglib,aspectJ)来测试方法被调用。 ...

答案 2 :(得分:0)

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

这样的库