我可以监视使用get方法的对象吗?

时间:2019-09-06 11:10:21

标签: java junit mockito spy

我有一个简单的问题,我做错了什么?我为SomeClass创建了一个间谍。这是代码:

public class SomeClass {

   protected Car car;

   public SomeClass(Car car) {
      this.car = car;
   }


   public void doSomething() {

      BMW bmw = car.getBMW();
      bmw.setWheels(null);

      if(StringUtils.isEmptyStringOrNull(bmw.getWheels())) {
         throw new Exception e;
      }
   }
}

doSomething方法中发生了很多事情,我只是为了解决我的问题而将其缩短了,我无法更改。这是我的测试课:

@RunWith(PowerMockRunner.class)
public class SomeClassTest {

   private SomeClass someClassTest;
   private Car carTest;

   @Before 
   public void setUp() {
      carTest = new Car(createVolkswagen(), createBMW());
      someClassTest = new SomeClass(car);
   }

   @Test
   public void doSomethingTest() {
      BMW spy = spy(carTest.getBMW());
      doNothing.when(spy).setWheels(any());
      someClassTest.doSomething();
   }
}

它总是将值设置为null,我希望它是其他值,但不能为null

1 个答案:

答案 0 :(得分:0)

这里

_ABC

您正在创建一个新的BMW spy = spy(carTest.getBMW()); 实例,该实例充当真实对象的代理。间谍应该捕获一些调用,并将另一个调用代理到它所监视的基础“真实”对象。

为了使其正常工作,您必须将spy传递到spy中的活动对象中,以便对bmw的每次调用都会成为间谍,例如

setup

比它将起作用。