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

Java 我可以监视使用get方法的对象吗?,java,junit,mockito,spy,Java,Junit,Mockito,Spy,我有一个简单的问题,我做错了什么?我为某个阶级创造了一个间谍。代码如下: public class SomeClass { protected Car car; public SomeClass(Car car) { this.car = car; } public void doSomething() { BMW bmw = car.getBMW(); bmw.setWheels(null); if(Strin

我有一个简单的问题,我做错了什么?我为某个阶级创造了一个间谍。代码如下:

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;
      }
   }
}
在剂量测定法中发生了更多的事情,我只是缩短了它,只是为了解决我的问题,我不能改变它。这是我的测试课:

@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以外的任何其他值

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

为了让它工作,你必须在
设置中将你的
spy
传递到live object中,这样对你的bmw的每一个调用都会被trought spy例如

carTest = new Car(createVolkswagen(), spy(createBMW()));

比它的工作

someClassTest
没有你的间谍。它具有原始对象。你的间谍只存在于
doSomethingTest
中。我看不出你的间谍对象会被注射到哪里;你在汽车测试的设置中使用了
createBMW()
,因此你在
doSomethingTest()
中创建的间谍不会被使用,但即使我制作了类似
@spy private car carTest
的东西,我也只能监视整个汽车,不能监视其中的对象。非常感谢,我不知道你可以将间谍作为参数传递,又学到了一些新东西。没有它,你根本不能使用你的间谍。