我的测试失败了,但真正的代码效果很好。 我有两个简单的课程:
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
}
}
答案 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)。