第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

注釋和方法調(diào)用之間的 Mockito 區(qū)別

注釋和方法調(diào)用之間的 Mockito 區(qū)別

躍然一笑 2022-07-20 20:19:47
我有一個(gè)關(guān)于在 Java 中使用 Mockito 的問題。我將附上 2 塊類似的代碼:第一個(gè),效果很好package controller;import model.DatabaseModel;import org.json.JSONArray;import org.json.JSONObject;import org.junit.Before;import org.junit.Test;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.MockitoAnnotations;import java.util.ArrayList;import static org.junit.Assert.assertEquals;import static org.mockito.Mockito.when;public class TestController {    JSONObject jsonObj1;    JSONArray testArr;    @Mock    private DatabaseModel testDB;    @InjectMocks    private Controller controller;    @Before    public void setup() {        MockitoAnnotations.initMocks(this);        jsonObj1 = new JSONObject();        jsonObj1.put("name", "Bar");        testArr = new JSONArray();        testArr.put(jsonObj1);        when(testDB.getActivites()).thenReturn(testArr);    }    @Test    public void testServerCon() {        ArrayList<String> testServer = new ArrayList<>();        testServer.add("Bar");        assertEquals(testServer, controller.getAllActivites());    }}第二個(gè),它并沒有真正起作用:package controller;import model.DatabaseModel;import org.json.JSONArray;import org.json.JSONObject;import org.junit.Before;import org.junit.Test;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.MockitoAnnotations;import java.util.ArrayList;import static org.junit.Assert.assertEquals;import static org.mockito.Mockito.*;public class TestController2 {    JSONObject jsonObj1;    JSONArray testArr;    DatabaseModel testDB;    Controller controller;    @Before    public void setup() {        jsonObj1=new JSONObject();        jsonObj1.put("name", "Bar");        testArr=new JSONArray();        testArr.put(jsonObj1);        controller=new Controller();        testDB=mock(DatabaseModel.class);        when(testDB.getActivites()).thenReturn(testArr);        verify(testDB).getActivites();    }當(dāng)我對(duì)第二個(gè)使用 verify 方法時(shí),我收到一個(gè)錯(cuò)誤,該方法從未在模擬上被調(diào)用,所以我想知道我錯(cuò)過了什么?我在網(wǎng)上查了教程,有些使用注釋,有些使用方法調(diào)用,但是如果我沒記錯(cuò)的話,它們應(yīng)該是相同的,那么我在這里缺少什么?
查看完整描述

2 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

在您的第一個(gè)示例中,@InjectMocks注釋導(dǎo)致的實(shí)例Controller被注入mocked DatabaseModel。


在你的第二個(gè)例子中,你構(gòu)造了Controller這樣的......


controller=new Controller();

...但是您永遠(yuǎn)不會(huì)將模擬注入Database Model到Controller. 所以,當(dāng)你調(diào)用controller.getAllActivites()你的控制器時(shí),永遠(yuǎn)不要使用模擬的DatabaseModel. 如果您可以DatabaseModel將Controller. 例如:


testDB=mock(DatabaseModel.class);


// constructor injection

controller=new Controller(testDB);


// setter injection

controller=new Controller();

controller.setDatabaseModel(testDB);

注意:即使您verify(testDB).getActivites()從 setup 方法中刪除,除非您實(shí)際將模擬對(duì)象提供DatabaseModel給controller.


查看完整回答
反對(duì) 回復(fù) 2022-07-20
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

您正在第二版verify中的方法中執(zhí)行...setup


@Before

public void setup() {


    jsonObj1=new JSONObject();

    jsonObj1.put("name", "Bar");

    testArr=new JSONArray();

    testArr.put(jsonObj1);

    controller=new Controller();

    testDB=mock(DatabaseModel.class);

    when(testDB.getActivites()).thenReturn(testArr);

    verify(testDB).getActivites(); // REMOVE THIS LINE


}

此時(shí)不會(huì)調(diào)用任何內(nèi)容,因此會(huì)出現(xiàn)錯(cuò)誤。


您可能想將此行移到您的測(cè)試方法中,例如...


@Test

public void testServerCon(){


    ArrayList<String> testServer=new ArrayList<>();

    testServer.add("Bar");

    assertEquals(testServer, controller.getAllActivites());

    verify(testDB).getActivites();

}


查看完整回答
反對(duì) 回復(fù) 2022-07-20
  • 2 回答
  • 0 關(guān)注
  • 105 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)