簡體   English   中英

測試 class 時,使用 Junit 和 Mockito 檢查方法內的工作

[英]when testing a class, check the work inside the method using a Junit and a Mockito

我有一個 class 測試,我遇到了困難,如何檢查方法 addBeginList() 中的操作“list.add (int)”是否發生在特定列表上。 使用 Moсkito 庫,檢查是否在 class 的列表中調用了特定方法?

public class ClassA implements IClassA {

private List<Integer> list;

public ClassA (List<Integer> list) {
    this.list = list;
}

@Override
public int addBeginList() {

    long t1 = System.currentTimeMillis();
    list.add(5);
    long t2 = System.currentTimeMillis();

    return (int) t2 - (int) t1;
}

測試 class

@RunWith(MockitoJUnitRunner.class)
public class ClassATest{

private ClassA mockClassA;
private static final int EXPECTED = 0;
private static final int DELTA = 1000;
private static final int SIZE = 7000;


@Before
public void setUp() throws Exception {
    mockClassA = Mockito.mock(ClassA.class);
    mockClassA.initialize(SIZE);
    mockClassA.addBeginList();
}

@Test
public void initialize() {
   
}

@Test
public void addBeginList() {
    assertEquals(EXPECTED, mockClassA.addBeginList(), DELTA);
}

第一步是確保測試 ClassA 的真實實例,而不是模擬。

接下來,您可以向它提供一個真實列表並檢查它是否包含某個元素,或者向它提供一個模擬列表並使用 Mockito 檢查是否調用了特定方法:

verify(mockedList).add(5)

我找到了解決問題的方法:

public class ClassA extends AbstractList<Integer> implements IClassA {///}

在測試 class 中:

private List<Integer> mockedList;
private ClassA classA;

@Before
public void setUp() throws Exception {
    mockedList = Mockito.mock(ClassA.class);
    classA = new ClassA(mockedList);
}

@Test
public void addBeginList() {
    assertEquals(EXPECTED, classA.addBeginList(), DELTA);
    verify(mockedList).add(5);
}

暫無
暫無

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

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