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");