org.mockito.Matchers.any() 和 jmockit 问题
Issue with org.mockito.Matchers.any() and jmockit
我有一个使用 jmockit 和 mockito 的 UT
在这个UT中,我有一个字段@Tested TestService testService
testService 有一种使用 Car 作为参数的方法:testService.doTest(Car car)
然后我的UT:testService.doTest(any(Car.class))
当我调试这个 UT 时我发现 testService.doTest(any(Car.class))
总是将 null 传递给 doTest(car)
,如果我想要 doTest(car)
中的汽车?
我尝试了 (Car)any()
、(Car)anyObject()
、none 个帮助,有什么想法吗?
更新:
我有代码:
class TestService{
@AutoWired
Dependency dependency;
doTest(Car car){
dependency.doSomeThing(car);
print(car.toString());
}
}
UT代码:
@Injectable Dependency mockDependency;
@Tested TestService testService;
//record
new Expectations() {{
mockDependency.doSomeThing((Car)with(any));
result=detailCar;
}};
//call verify
new Verifications(){{
codeResult=testService.doTest((Car)with(any))
//some codeResult assert
}};
这是所有 jmockit 版本,我在 car.toString()
得到 NullPointerException
如果我将其更改为:
new Verifications(){{
codeResult=testService.doTest(new Car())
//some codeResult assert
}};
或
final Car car;
new Verifications(){{
codeResult=testService.doTest(car)
//some codeResult assert
}};
我在 codeResult=testService.doTest(...)
得到 MissingInvocation 似乎 instance car
不匹配 (Car)with(any)
Mock car = mock(Car.class)
并在 doTest 中传递此 car
。希望它会有所帮助
此外,如果您正在调用 Car 的任何方法,请确保您还定义了行为。
例如
when(car.getName(anyString())).then("bmw");
我有一个使用 jmockit 和 mockito 的 UT
在这个UT中,我有一个字段@Tested TestService testService
testService 有一种使用 Car 作为参数的方法:testService.doTest(Car car)
然后我的UT:testService.doTest(any(Car.class))
当我调试这个 UT 时我发现 testService.doTest(any(Car.class))
总是将 null 传递给 doTest(car)
,如果我想要 doTest(car)
中的汽车?
我尝试了 (Car)any()
、(Car)anyObject()
、none 个帮助,有什么想法吗?
更新: 我有代码:
class TestService{
@AutoWired
Dependency dependency;
doTest(Car car){
dependency.doSomeThing(car);
print(car.toString());
}
}
UT代码:
@Injectable Dependency mockDependency;
@Tested TestService testService;
//record
new Expectations() {{
mockDependency.doSomeThing((Car)with(any));
result=detailCar;
}};
//call verify
new Verifications(){{
codeResult=testService.doTest((Car)with(any))
//some codeResult assert
}};
这是所有 jmockit 版本,我在 car.toString()
如果我将其更改为:
new Verifications(){{
codeResult=testService.doTest(new Car())
//some codeResult assert
}};
或
final Car car;
new Verifications(){{
codeResult=testService.doTest(car)
//some codeResult assert
}};
我在 codeResult=testService.doTest(...)
得到 MissingInvocation 似乎 instance car
不匹配 (Car)with(any)
Mock car = mock(Car.class)
并在 doTest 中传递此 car
。希望它会有所帮助
此外,如果您正在调用 Car 的任何方法,请确保您还定义了行为。
例如
when(car.getName(anyString())).then("bmw");