首页 > 解决方案 > 使用 Mockito 的测试用例未返回预期的字符串值

问题描述

我在这里为我的测试用例设置了@Before

r = RentACat.createInstance();
c1 = Mockito.mock(Cat.class);
        Mockito.when(c1.getId()).thenReturn(1);
        Mockito.when(c1.getName()).thenReturn("Jennyanydots");

c2 = Mockito.mock(Cat.class);
        Mockito.when(c2.getId()).thenReturn(2);
        Mockito.when(c2.getName()).thenReturn("Old Deuteronomy");

用我的测试用例作为

r.addCat(c1);
        r.addCat(c2);
        r.addCat(c3);
        
        //Execution Steps
        String ret = r.listCats();
        
        //Postconditions
        assertEquals("Return string is not equal to expected string with added cats", "ID 1. Jennyanydots\nID 2. Old Deuteronomy\", ret);

这是我的 listCats();

    public String listCats() {
        // TODO
        StringBuilder retBuild = new StringBuilder();
        for(Cat c : cats) {
            if(c.getRented() == false) {
                retBuild.append(c.toString());
                retBuild.append("\n");
            }
        }
        return retBuild.toString();
    }

但是,当我运行这个测试用例时,我得到一个空字符串的返回值。我已经尝试了一些事情,比如改变我的实现listCats(); ,这样

    public String listCats() {
        // TODO
        StringBuilder retBuild = new StringBuilder();
        for(Cat c : cats) {
            if(c.getRented() == false) {
                retBuild.append(c.toString());
                retBuild.append("\n");
                return retBuild.toString();

            }
        }
        return retBuild.toString();
    }

但是,当我运行它时,我只得到了一只猫,正如预期的那样,观察到的值为"Mock for Cat, hashCode: 10523xyz"

我在我的listCats()方法中做错了什么?

标签: javajunitmockito

解决方案


是的,因为您还需要toString()在模拟对象中定义行为。您看到的字符串是模拟toString对象的默认版本。你可以像下面这样定义你的。

Mockit.when(c1.toString()).thenReturn("Jennyanydots");
Mockit.when(c2.toString()).thenReturn("Old Deuteronomy");

注意:如果Cat该类只是带有 getter/setter 的 POJO 对象,则无需模拟它,您只需从数据中填充您想要的任何内容


推荐阅读