簡體   English   中英

MockitoJUnitRunner 已棄用

[英]MockitoJUnitRunner is deprecated

我正在嘗試使用@InjectMocks@Mock進行單元測試。

@RunWith(MockitoJUnitRunner.class)
public class ProblemDefinitionTest {

    @InjectMocks
    ProblemDefinition problemDefinition;

    @Mock
    Matrix matrixMock;    

    @Test
    public void sanityCheck() {
        Assert.assertNotNull(problemDefinition);
        Assert.assertNotNull(matrixMock);
    }
}

當我不包含@RunWith注釋時,測試失敗。

不推薦使用 MockitoJUnitRunner 類型

我正在使用 Mockito 2.6.9。 我應該怎么做?

org.mockito.runners.MockitoJUnitRunner現在確實已棄用,您應該改用org.mockito.junit.MockitoJUnitRunner 正如您所看到的,只有包名發生了變化,類的簡單名稱仍然是MockitoJUnitRunner

摘自org.mockito.runners.MockitoJUnitRunner的 javadoc:

移動到MockitoJUnitRunner ,這個類將被 Mockito 3 刪除

你可以試試這個:

@Before
public void setup() {
    MockitoAnnotations.initMocks(this);
}

因為你添加了@Before注釋,你的模擬對象可以是新的並被多次記錄,並且在所有測試中你可以給對象新的屬性。 但是,如果您想一次性記錄模擬對象的行為,請添加@BeforeCLass

還有一個@Rule選項:

@Rule 
public MockitoRule rule = MockitoJUnit.rule();

或者在 Kotlin 中:

@get:Rule
var rule = MockitoJUnit.rule()

您可以嘗試導入以下內容:

import org.mockito.runners.MockitoJUnitRunner;

此外,如果您使用的是Eclipse ,只需按Ctrl + Shift + O ,它就會自動導入它。

在我的案例中,當我將依賴項更新到最新版本時,我設法解決了這個問題:

def mockito_version = '2.28.2'

// For local unit tests on your development machine
testImplementation "org.mockito:mockito-core:$mockito_version"

// For instrumentation tests on Android devices and emulators
androidTestImplementation "org.mockito:mockito-android:$mockito_version"

然后我通過替換命令(Mac:cmd+Shift+R Windows:Ctrl+Shift+R)從

import org.mockito.runners.MockitoJUnitRunner; 

import org.mockito.junit.MockitoJUnitRunner;

你可以試試這個,如果你不想使用 @RunWith(MockitoJUnitRunner.class)

@BeforeClass
public void setup() {
    MockitoAnnotations.initMocks(this);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM