簡體   English   中英

如何在Java中測試此void方法?

[英]How to test this void method in java?

這是我正在測試的課程:

public class MovieListing implements Listing {

    private BitSet keyVectors = new BitSet();
    private int year;
    private String title;
    private Set<String> keywords;

    public MovieListing(String title, int year) throws ListingException {
        if (title == null || title.isEmpty() || year <= 0) {
              throw new ListingException("Missing Title or year <= 0");
        }
        this.title = title;
        this.year = year;
        keywords = new TreeSet<String>();
    }

    public void addKeyword(String kw) throws ListingException {
        if (kw == null || kw.isEmpty()) {
            throw new ListingException("Missing keywords");
        }
        this.keywords.add(kw);
    }

這是對addKeyword方法的測試:

@Before
public void setup() throws Exception {
    movieList = new MovieListing(null, 0);
}

@Test
public void addKeywords() throws Exception {
    assertEquals(0, movieList.getKeywords().size());
    movieList.addKeyword("test1");
    assertEquals(1, movieList.getKeywords().size());        
    movieList.addKeyword("test2");
    assertEquals(2, movieList.getKeywords().size());
}

哪里出問題了? 它無法通過。 感謝您的任何建議!

以及如何在類中測試異常 ,原因是如果我使用@Test(expected=Exception.class)則該異常不起作用

您要在此處初始化null title

@Before
public void setup() throws Exception {
    movieList = new MovieListing(null, 0);
}

然后,如果它為null則會在構造函數上引發異常:

if (title == null || title.isEmpty() || year <= 0) {
      throw new ListingException("Missing Title or year <= 0");
}

盡管如果傳入nullyear為0,您將要調用錯誤條件,這要歸功於:(由於這種奇妙的條件,這可能是完全有效的):

if (title == null || title.isEmpty() || year <= 0) {
    throw new ListingException("Missing Title or year <= 0");
}

...您錯過了以某種方式或能力設置的keywords的暴露范圍。

由於您的方法是void ,因此您無法斷言要從該方法獲得的收益。 因此,您必須檢查要處理的實體的內部狀態。

這可以通過在keywords字段上使用package-private getter輕松完成:

Set<String> getKeywords() {
    return keywords;
}

此時,請確保您的測試類與實際代碼位於同一程序包中。

此外,我建議不要在init中設置這種初始數據。 我認為每個測試都是空白,需要初始化我們要測試的實體。 將實例移動到測試本身內部很簡單。

暫無
暫無

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

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