不能用Mockito 2来嘲笑最终的Kotlin课堂

我无法使用Mockito 2来嘲笑Kotlin最后一堂课。另外,我正在使用Robolectric。

这是我的测试代码:

@RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class Test { // more mocks @Mock MyKotlinLoader kotlinLoader; @Before public void setUp() { MockitoAnnotations.initMocks(this); } } 

当我们尝试初始化setUp()方法中的模拟时,测试失败。

另外,我在我的代码中使用下面的gradle依赖关系:

 testCompile 'org.robolectric:robolectric:3.3.2' testCompile 'org.robolectric:shadows-multidex:3.3.2' testCompile 'org.robolectric:shadows-support-v4:3.3.2' testCompile("org.powermock:powermock-api-mockito2:1.7.0") { exclude module: 'hamcrest-core' exclude module: 'objenesis' } testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-inline:2.8.9' 

所有其他单元测试通过使用这种配置,但只要我试图嘲笑Kotlin类,它会引发以下错误:

Mockito cannot mock/spy because : - final class

请注意我正在使用Mockito版本2,我正在使用inline依赖关系,它可以自动启用模拟最终类的能力。

你可以使用Powermock,例如:

 import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.spy; import static org.powermock.api.mockito.PowerMockito.when; @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) @PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" }) @PrepareForTest({FinalClass1.class, FinalClass2.class}) public class Test { @Rule public PowerMockRule rule = new PowerMockRule(); ... // your code here } 

PowerMock实现了自己的MockMaker ,这导致与Mockito模拟器内联不兼容,即使PowerMock只是作为一个依赖而被添加,而没有被使用。 如果路径中存在两个org.mockito.plugins.MockMaker ,则只能使用一个,哪一个是未定的。

然而,PowerMock可以将调用委托给另一个MockMaker,然后在没有PowerMock的情况下运行测试。 由于PowerMock 1.7.0,可以使用PowerMock配置进行配置。

MockMaker可以通过创建文件org/powermock/extensions/configuration.properties并设置:

 mockito.mock-maker-class=mock-maker-inline 

在PowerMock中使用Mockito模拟器内联示例: https : //github.com/powermock/powermock-examples-maven/tree/master/mockito2