Mockito测试失败了

时间:2017-08-23 08:15:58

标签: java unit-testing mocking mockito

我的测试失败了,但真正的代码效果很好。 我有两个简单的课程:

public class BarTest {
    private Bar bar;
    private Food food;

    @Test
    public void checkSizeFood (){
        bar = mock(Bar.class);
        food = mock(Food.class);
        bar.addFood(food);
        assertThat(bar.getsizeBar(),is(1)); //here failed
    }
}

2 个答案:

答案 0 :(得分:2)

bar是一个模拟人。调用addFood实际上并没有对对象的状态做任何事情,因为它不是"真实的" Bar个实例。如果您想测试Bar的功能,您应该使用真实对象,而不是模拟:

bar = new Bar();
food = mock(Food.class);
bar.addFood(food);
assertThat(bar.getsizeBar(), is(1));

答案 1 :(得分:0)

您似乎了解如何使用模拟进行单元测试。

关键是:您模拟您的测试类需要完成其工作的事情。确切地说:当您的测试类调用您必须控制的内容时,您将创建该类的模拟实例并使用它来构建测试中的对象你稍后调用一个方法。

因此,类调用BarTest 模拟 Bar的实例是没有意义的。

在你的情况下,测试用例应该(最有可能!)阅读:

Bar underTest = new Bar();
bar.add(new Foo());
assertThat(bar.getSize(), is(1));

请注意:

  • 你只需要模拟对象 - 如果你可以在单元测试中使用new创建一个Foo对象 - 那么就这样做。当然,如果在{Foo}对象上调用add()方法的话会有所不同。但是,首先不应该将此方法称为add()
  • 命名继续:该方法应该命名为getSize() - 而不是getsizeBar():将类名放入方法名称是没有意义的,方法名称是camelCase,而不是camelcaseWhatever。

长话短说:看起来你想通过反复试验来学习模拟/单元测试。这是一种无效的方法 - 在将它们放入代码之前,您必须先理解概念。因此:首先开始阅读一本好书或教程(比如one)。

相关问题