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
的东西,我也只能监视整个汽车,不能监视其中的对象。非常感谢,我不知道你可以将间谍作为参数传递,又学到了一些新东西。没有它,你根本不能使用你的间谍。