我正在为我在代码中定义的一些bean编写JUnit测试,以便通过java注释了解spring配置。测试代码如下所示:
public class FooTest {
@MockBean
private Baz baz; //injected
@MockBean
private Qux qux; //injected
public void testBar() {
Foo foo = new Foo(baz);
Qux reponse = foo.bar();
// verify or assert?
}
}
其他类的定义如下:
@Component
class Foo {
Baz baz;
@Autowired
Foo(Baz baz) {
this.baz = baz
}
Qux bar() {
baz.waldo();
baz.fred();
return baz.newQux();
}
}
@Component
class Baz {
//...
}
正如您在我的JUnit测试中看到的,我从Qux
类中的模拟Qux
bean返回FooTest
响应。它让我考虑在类bar
中测试Foo
方法。我在这里看到3个选项,并想知道什么是最佳实践?
response
中testBar
实例变量的qux
测试方法FooTest
执行assertEquals。verify
baz
上的FooTest
实例waldo
上也fred
进行了baz
或者这些验证调用是多余的,因为返回{name: '12.1.2011', series1: 4000, series2: 2400, series3: 2400},
{name: '12.2.2011', series1: 3000, series2: 1398, series3: 2210},
{name: '12.3.2011', series1: 2000, series2: 9800, series3: 2290}
,我认为它们被调用了?答案 0 :(得分:1)
首先,您需要定义执行这些语句时会发生什么。
baz.waldo();
baz.fred();
baz.newQux();
因为巴兹是个嘲笑者。
其次,您必须进行验证以确保调用所有方法。你也可以做断言。但首先,您需要定义在调用baz.newQux()
时必须重新调整的内容。如果这与您定义的内容相同,请检查foo.bar()
的响应。
答案 1 :(得分:1)
如果有可能执行 Assert ,请执行此操作。在这种情况下,您将检查方法在调用后返回的实际值。
验证仅检查调用该方法。当您调用某个方法并且想要检查是否在内部调用了另一个方法时,这更有用,但是您无法基于返回对象执行此操作。在你的情况下,你返回整个对象,因此,从我的角度来看,你应该能够使用断言。