有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中测试这个void方法?

这是我正在测试的类:

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());
}

哪里出了问题?它不能通过。谢谢你的建议

我如何在类中测试异常,因为如果我使用^{,它就不起作用了


共 (2) 个答案

  1. # 1 楼答案

    您正在用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");
    }
    
  2. # 2 楼答案

    尽管事实上,如果传入null,或者year为0,您将调用错误条件(由于这个奇妙的条件,可能完全有效):

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

    。。。您在某些方面或容量上缺少了keywords集的曝光

    由于您的方法是void,因此无法断言您将从该方法得到什么。因此,您必须检查正在处理的实体的内部状态

    这可以通过keywords字段上的包私有getter轻松实现:

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

    此时,请确保测试类与实际代码位于同一个包中

    此外,我建议不要在init中设置这种初始数据。我认为每个单独的测试都是一个空白的板岩,需要初始化我们想要测试的实体。这将是一个简单的问题,将实例化移动到测试本身中